我有列表(報告)。報告有90個屬性。我不想寫他們每個屬性來獲得屬性值。有沒有啥子從列表迭代列表中的所有屬性
防爆得到化子性質值:
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
我有列表(報告)。報告有90個屬性。我不想寫他們每個屬性來獲得屬性值。有沒有啥子從列表迭代列表中的所有屬性
防爆得到化子性質值:
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
您可以使用反射:
static readonly PropertyInfo[] properties = typeof(Reports).GetProperties();
foreach(var property in properties) {
property.GetValue(someInstance);
}
然而,這將是緩慢的。
一般來說,一個具有90個proeprties的類是糟糕的設計。
考慮使用字典或重新考慮您的設計。
PropertyInfo[] props =
obj.GetType().GetProperties(BindingFlags.Public |BindingFlags.Static);
foreach (PropertyInfo p in props)
{
Console.WriteLine(p.Name);
}
我不會說流利的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
。
聽起來很適合反射或元編程(取決於所需的性能)。
var props=typeof(Report).GetProperties();
foreach(var row in list)
foreach(var prop in props)
Console.WriteLine("{0}={1}",
prop.Name,
prop.GetValue(row));
你想對值做什麼? – SLaks 2010-10-13 17:09:16