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

时间:2016-09-02 09:13:06

标签: c#

我有一个定义为

的类的对象列表
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
   });

并将该列表输出为具有属性名称作为列标题(full source code

的表
var propertyArray = typeof(T).GetProperties();
foreach (var prop in propertyArray)
     result.AppendFormat("<th>{0}</th>", prop.Name);  

并获取

FirstName  | LastName  | Age
----------------------------------
Alex         Friedman    27

我想要一些自定义标题,例如

First Name | Last Name | Age 

问题:如何为Person类的每个属性定义列标题?我应该在属性上使用自定义属性还是有更好的方法?

1 个答案:

答案 0 :(得分:3)

这是我在你的情况下做的一种方法。这很简单,自我解释:

 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无论如何都使用了Reflection,你可以像上面一样修改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;
    }
  }