Ответ 1
Вы можете попробовать это
foreach (PropertyInfo info in typeof(T).GetProperties()
.Where(x=>x.DeclaringType == typeof(T))) // filtering by declaring type
{
propertyNames.Add(info.Name);
}
У меня есть два класса (модели), один из которых - базовый класс, а другой - подкласс:
public class BaseClass
{
public string BaseProperty{get;set;}
}
public class ChildClass: BaseClass
{
public string ChildProperty{get;set;}
}
В приложении я вызываю ChildClass
динамически, используя generics
List<string> propertyNames=new List<string>();
foreach (PropertyInfo info in typeof(T).GetProperties())
{
propertyNames.Add(info.Name);
}
Здесь, в списке propertyNames
, я получаю свойство для BaseClass
. Я хочу только те свойства, которые находятся в классе child. Возможно ли это?
Что я пробовал?
Вы можете попробовать это
foreach (PropertyInfo info in typeof(T).GetProperties()
.Where(x=>x.DeclaringType == typeof(T))) // filtering by declaring type
{
propertyNames.Add(info.Name);
}
Использование простого цикла для получения имен свойств базового класса
var type = typeof(T);
var nameOfBaseType = "Object";
while (type.BaseType.Name != nameOfBaseType)
{
type = type.BaseType;
}
propertyNames.AddRange(type.GetProperties().Select(x => x.Name))
... Я хочу только те свойства, которые находятся в дочернем классе. Возможно ли это?
Вам нужно использовать перегрузку GetProperties, которая принимает BindingFlags и включить флаг BindingFlags.DeclaredOnly
.
PropertyInfo[] infos = typeof(ChildClass).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
DeclaredOnly: указывает, что должны учитываться только участники, объявленные на уровне иерархии поставляемого типа. Унаследованные члены не учитываются.