Таким образом, вы можете написать метод расширения, который использует объект или тот, который использует тип.
public static class ObjectExtensions
{
public static int GetNumberOfProperties(this object value)
{
return value.GetType().GetProperties().Count();
}
public static int GetNumberOfProperties(this Type value)
{
return value.GetProperties().Count();
}
}
Использование:
new C507().GetNumberOfProperties();
typeof(C507).GetNumberOfProperties();
Однако, вы явно указать две вещи:
Я мог скопировать и вставить в каждый класс меняя TYPEOF
I имеют около 1000 классов
Вы, вероятно, не хотят, чтобы создать экземпляр 1000 классов или копировать и вставлять typeof()
1000 раз
В этом случае, вы хотите, чтобы прочитать их все от Ассамблеи.
Так что-то вроде:
typeof(SomeClass).Assembly.GetTypes().Select(x => new
{
x.Name,
PropertyCount = x.GetType().GetProperties().Count()
});
SomeClass
Где класс (не имеет значения, какой), где все классы проживают.
Я просто выделил их в анонимный объект, который содержит имя и количество типов.
Это:
typeof(SomeClass).Assembly
Есть только convience способ получить сборку. Есть и другие способы.
Assembly.GetAssembly(typeof(Program)).GetTypes()
Assembly.GetCallingAssembly().GetTypes()
Assembly.Load("Some Assemble Ref").GetTypes()
Вы можете делать сортировки по типам, которые вы найдете. Если вы выберете сам Type
, вы можете создать его позже, используя Activator.CreateInstance
(если у него есть без параметров constuctor). Вы также можете автоматически заполнять свойства отражением.
Это, скорее всего, проблема XY. – OldFart
В чем проблема, которую вы пытаетесь решить? Скорее всего, это не лучшее решение. –
I *** очень *** надеюсь, что у вас нет 1000 классов с именем 'C000'' 'C999'! – Kroltan