在对象的属性上定义自定义标题
本文关键字:定义 自定义 标题 属性 对象 | 更新日期: 2023-09-27 18:05:23
我有一个定义为
的类的对象列表public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
var personList = new List<Person>();
personList.Add(new Person
{
FirstName = "Alex",
LastName = "Friedman",
Age = 27
});
并将该列表作为一个表输出,并将属性名作为列头(完整源代码)
var propertyArray = typeof(T).GetProperties();
foreach (var prop in propertyArray)
result.AppendFormat("<th>{0}</th>", prop.Name);
和get
FirstName | LastName | Age
----------------------------------
Alex Friedman 27
我想要一些自定义标题,比如
First Name | Last Name | Age
问题:如何为Person类的每个属性定义列标题?我应该在属性上使用自定义属性还是有更好的方法?
这是我在您的情况下所做的一种方法。这很简单,不言自明:
var propertyArray = typeof(T).GetProperties();
foreach (var prop in propertyArray) {
foreach (var customAttr in prop.GetCustomAttributes(true)) {
if (customAttr is DisplayNameAttribute) {//<--- DisplayName
if (String.IsNullOrEmpty(headerStyle)) {
result.AppendFormat("<th>{0}</th>", (customAttr as DisplayNameAttribute).DisplayName);
} else {
result.AppendFormat("<th class='"{0}'">{1}</th>", headerStyle, (customAttr as DisplayNameAttribute).DisplayName);
}
break;
}
}
}
由于链接的extensionmethod使用反射,你可以像上面那样修改Header-Formatting循环。
属性的用法如下:
public class Person {
[DisplayName("First Name")]
public string FirstName {
get; set;
}
[DisplayName("Last Name")]
public string LastName {
get; set;
}
public int Age {
get; set;
}
}