您可以预先缓存您感兴趣的属性的名称(即具有描述属性的属性),然后使用这些属性,然后使用这些属性来获取您感兴趣的值。
我已经介绍了一个快速的示例,它不是最强大的代码,但它显示了一般的想法(对订购有很多假设),并且只能获取一次属性。
(编辑:意识到我们只需要一次致电GetProperties)。
var whitelist = typeof (DocumentTrackerChaseReport)
.GetProperties()
.Where(x => Attribute.IsDefined(x, typeof (DescriptionAttribute)));
var rows = things.Select(x => whitelist.Select(y => y.GetValue(x) ?? ""));
这会给你一个 IEnumerable<IEnumerable<object>>
, ,或换句话说,行列表和每行,列列表(每个列的值为对象)。
然后,您可以按以下方式迭代(伪代码)
foreach (var header in whitelist) {
// print column of header row
}
foreach (var row in rows) {
foreach (var col in row) {
// print an individual cell
}
// break for a new row
}