迭代列表中的所有属性

时间:2010-10-13 17:06:33

标签: c# asp.net vb.net

我有List(Of Report)。报告有90个属性。我不想写每个属性来获取属性的值。是否有任何从列表中获取propeties值的方法

前:

Dim mReports as new List(Of Reports)
mReport = GetReports()

For each mReport as Report In mReports
   'Here I want get all properties values without writing property names
next

4 个答案:

答案 0 :(得分:6)

您可以使用反射:

static readonly PropertyInfo[] properties = typeof(Reports).GetProperties();

foreach(var property in properties) {
    property.GetValue(someInstance);
}

然而,它会很慢。

一般来说,有90个专业的班级设计很差 考虑使用词典或重新思考你的设计。

答案 1 :(得分:1)

PropertyInfo[] props = 
     obj.GetType().GetProperties(BindingFlags.Public |BindingFlags.Static);
foreach (PropertyInfo p in props)
{
  Console.WriteLine(p.Name);
}

答案 2 :(得分:1)

我不会说流利的VB.NET,但你可以很容易地将这样的东西翻译成VB.NET。

var properties = typeof(Report).GetProperties();
foreach(var mReport in mReports) {
    foreach(var property in properties) {
       object value = property.GetValue(mReport, null);
       Console.WriteLine(value.ToString());
    }
}

这称为reflection。您可以在MSDN上了解它在.NET中的用法。我使用Type.GetProperties获取属性列表,使用PropertyInfo.GetValue来读取值。您可能需要添加各种BindingFlags或检查PropertyInfo.CanRead等属性,以准确获取所需的属性。此外,如果您有任何索引属性,则必须相应地将第二个参数调整为GetValue

答案 3 :(得分:1)

听起来非常适合反射或元编程(取决于所需的性能)。

var props=typeof(Report).GetProperties();
foreach(var row in list)
foreach(var prop in props)
    Console.WriteLine("{0}={1}",
        prop.Name,
        prop.GetValue(row));