递归地获取类的所有属性C#

时间:2017-02-07 17:42:37

标签: c# .net system.reflection

我有一个看起来像

的课程
public class Employee
{
    public string FirstName { get; set; };
    public string LastName { get; set; }; 
    public Address Address { get; set; };  
}

public class Address 
{
    public string HouseNo { get; set; };
    public string StreetNo { get; set; }; 
    public SomeClass someclass { get; set; }; 
}

public class SomeClass 
{
    public string A{ get; set; };
    public string B{ get; set; }; 
}

我已经找到了一种方法,可以在一个类中找到像String一样的原始属性,int bool等使用Reflection

但我还需要找出类似于ex的所有复杂类型的列表。 class具有类Employee的地址和Address

中的SomeClass类

1 个答案:

答案 0 :(得分:6)

如果您已经知道如何使用反射,这应该很简单:

private List<Type> alreadyVisitedTypes = new List<Type>(); // to avoid infinite recursion
public static void PrintAllTypes(Type currentType, string prefix)
{
    if (alreadyVisitedTypes.Contains(currentType)) return;
    alreadyVisitedTypes.Add(currentType);
    foreach (PropertyInfo pi in currentType.GetProperties())
    {
        Console.WriteLine($"{prefix} {pi.PropertyType.Name} {pi.Name}");
        if (!pi.PropertyType.IsPrimitive) PrintAllTypes(pi.PropertyType, prefix + "  ");
    }
}

这样的电话
PrintAllTypes(typeof(Employee), string.Empty);

会导致:

String FirstName
  Char Chars
  Int32 Length
String LastName
Address Address
  String HouseNo
  String StreetNo
  SomeClass someclass
     String A
     String B