在对象的属性上定义自定义标题

本文关键字:定义 自定义 标题 属性 对象 | 更新日期: 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;
    }
  }