Vous pouvez pré-cacher les noms des propriétés qui vous intéressent (c'est-à-dire celles avec l'attribut description), puis les utiliser pour ne saisir que les valeurs qui vous intéressent.
J'ai piraté un exemple rapide de cela, ce n'est pas le code le plus robuste, mais cela montre l'idée générale (fait beaucoup d'hypothèses sur la commande) et j'ai obtenu les attributs uniquement.
(Modifier: réalisé que nous n'avions besoin d'appeler GetProperties qu'une seule fois pour tout).
var whitelist = typeof (DocumentTrackerChaseReport)
.GetProperties()
.Where(x => Attribute.IsDefined(x, typeof (DescriptionAttribute)));
var rows = things.Select(x => whitelist.Select(y => y.GetValue(x) ?? ""));
Cela vous donnera un IEnumerable<IEnumerable<object>>
, ou en d'autres termes, une liste de lignes et pour chaque ligne, une liste de colonnes (avec la valeur de chaque colonne étant un objet).
Vous pourriez ensuite parcourir cela comme suit (pseudo code)
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
}