我有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
答案 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));