관심있는 속성의 이름을 사전 캐시 할 수 있습니다 (예 : 설명 속성이있는 속성)를 사용하여 관심있는 값 만 가져 오기 위해 사용하십시오.
나는 이것의 빠른 예를 해킹했는데, 그것은 가장 강력한 코드는 아니지만 일반적인 아이디어 (순서에 대한 많은 가정을 만듭니다)를 보여주고 속성을 한 번만 가져 왔습니다.
(편집 : 모든 것에 대해 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
}