迭代传入的对象属性的方法

时间:2009-10-06 19:41:41

标签: c# oop reflection

试图弄清楚如何创建一个迭代对象属性的方法,然后输出它们(比如说现在是console.writeline)。

这是否可以使用反射?

e.g。

public void OutputProperties(object o)
{

      // loop through all properties and output the values

}

3 个答案:

答案 0 :(得分:4)

尝试以下

public void OutputProperties(object o) {
  if ( o == null ) { throw new ArgumentNullException(); }
  foreach ( var prop in o.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) ) {
    var value = prop.GetValue(o,null);
    Console.WriteLine("{0}={1}", prop.Name, value);
  }
}

这将输出在特定类型上声明的所有属性。如果任何属性在评估时抛出异常,它将失败。

答案 1 :(得分:2)

使用TypeDescriptor的替代方法,允许自定义对象模型在运行时显示灵活的属性(即您看到的不仅仅是类中的内容,并且可以使用自定义类型转换器来执行字符串转换):

public static void OutputProperties(object obj)
{
    if (obj == null) throw new ArgumentNullException("obj");
    foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(obj))
    {
        object val = prop.GetValue(obj);
        string s = prop.Converter.ConvertToString(val);
        Console.WriteLine(prop.Name + ": " + s);
    }
}

请注意,反射是默认实现 - 但通过ICustomTypeDescriptorTypeDescriptionProvider可以实现许多其他更有趣的模型。

答案 2 :(得分:1)

是的,您可以使用

foreach (var objProperty in o.GetType().GetProperties())
{
    Console.WriteLine(objProperty.Name + ": " + objProperty.GetValue(o, null));
}