如何遍历C#类(.NET 2.0)的属性?

时间:2010-02-05 09:23:55

标签: c# asp.net json class .net-2.0

说我有课:

public class TestClass
{
  public String Str1;
  public String Str2;
  private String Str3;

  public String Str4 { get { return Str3; } }

  public TestClass()
  {
    Str1 = Str2 = Str 3 = "Test String";
  }
}

有没有办法(C#.NET 2)迭代Class'TestClass'并打印出公共变量和属性?

记得.Net2

谢谢

4 个答案:

答案 0 :(得分:9)

迭代公共实例属性:

Type classType = typeof(TestClass);
foreach(PropertyInfo property in classType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
  Console.WriteLine(property.Name);
}

迭代公共实例字段:

Type classType = typeof(TestClass);
foreach(FieldInfo field in classType.GetFields(BindingFlags.Public | BindingFlags.Instance))
{
  Console.WriteLine(field.Name);
}

如果您还想要包含非公开媒体资源,请将BindingFlags.NonPublic添加到GetPropertiesGetFields的参数中。

答案 1 :(得分:1)

您可以使用reflection

TestClass sample = new TestClass();
BindingFlags flags = BindingFlags.Instance | 
    BindingFlags.Public | BindingFlags.NonPublic;

foreach (FieldInfo f in sample.GetType().GetFields(flags))
    Console.WriteLine("{0} = {1}", f.Name, f.GetValue(sample));

foreach (PropertyInfo p in sample.GetType().GetProperties(flags))
    Console.WriteLine("{0} = {1}", p.Name, p.GetValue(sample, null));

答案 2 :(得分:1)

您可以使用reflection执行此操作。

以下是使用反射进行扩展的an article

答案 3 :(得分:0)

要获取我们将使用的类型的属性:

Type classType = typeof(TestClass);
    PropertyInfo[] properties = classType.GetProperties(BindingFlags.Public | BindingFlags.Instance);

要获取我们将使用的类定义的属性:

Type classType = typeof(TestClass);
object[] attributes = classType.GetCustomAttributes(false); 

传递的布尔标志是继承标志,是否在继承链中搜索。

要获取我们将使用的属性的属性:

propertyInfo.GetCustomAttributes(false); 

使用上面给出的哈佛代码:

Type classType = typeof(TestClass);
object[] classAttributes = classType.GetCustomAttributes(false); 
foreach(PropertyInfo property in classType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
  object[] propertyAttributes = property.GetCustomAttributes(false); 
  Console.WriteLine(property.Name);
}