0

如何动态获取所有继承自 Person 类(Student、Teacher)的非泛型类和 Person 类的属性(Address)。

示例代码:

 [DataContract]
 [KnownType(typeof(Student))]
 [KnownType(typeof(Teacher))]
 public abstract class Person {
     [DataMember]
     public string Name { get; set; }

     [DataMember]
     public string Surname { get; set; }

     [DataMember]
     public Address _Address { get; set; }
 }
4

2 回答 2

1
var nonGenericProperties = typeof(Person)
    .GetProperties()
    .Where(p => !p.IsGenericType)
    .ToList();

var nonGenericClassesWhichInheritFromPerson = Assembly.GetAssembly(typeof(Person))
    .GetTypes()
    .Where(t => t.IsSubclassOf(typeof(Person))
    .ToList()

第二个查询仅检查同一程序集中的派生类型。

于 2012-07-11T12:35:32.050 回答
0

要查找所有继承 Person 的类,您需要定义要查找的位置。你不能到处看。假设所有类都与 Person 类在同一个程序集中,您可以这样写:

Assembly.GetAssembly(typeof(Person)).GetTypes().Where(t => typeof(Person).IsAssignableFrom(t) && !t.ContainsGenericParameters);

至于属性,在所有属性的 foreach 循环中执行相同操作:

foreach (var pi in typeof(Person).GetProperties())
{
// Do the same for pi.PropertyType
}
于 2012-07-11T12:35:53.257 回答