興味のあるプロパティの名前(すなわち、説明属性を持つもの)の名前を事前にキャッシュし、それらを使用して、興味のある値のみをつかむことができます。
私はこの簡単な例をまとめてハッキングしましたが、それは最も堅牢なコードではありませんが、一般的なアイデア(注文について多くの仮定を立てます)を示し、属性を一度だけ取得しました。
(編集:すべてに対して一度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
}