我试图创建一个通用方法,该方法将读取类的属性并在运行时返回该值。我该怎么做?
注意:DomainName属性属于DomainNameAttribute类。
[DomainName("MyTable")] Public class MyClass : DomainBase {}
我试图产生的是:
//This should return "MyTable" String DomainNameValue = GetDomainName<MyClass>();
public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute; if (dnAttribute != null) { return dnAttribute.Name; } return null; }
更新:
可以进一步推广此方法以使用任何属性:
public static class AttributeExtensions { public static TValue GetAttributeValue<TAttribute, TValue>( this Type type, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute { var att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute; if (att != null) { return valueSelector(att); } return default(TValue); } }
并像这样使用:
string name = typeof(MyClass) .GetAttributeValue((DomainNameAttribute dna) => dna.Name);