本文介绍一种通用的方法,用于动态访问和提取类的属性值。
定义一个接受类型参数的通用方法:
<code class="language-csharp">public string GetDomainName<T>()</code>
方法内部:
使用 typeof(T).GetCustomAttributes
检索自定义属性:
<code class="language-csharp"> var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute;</code>
如果属性存在,则返回其值:
<code class="language-csharp"> if (dnAttribute != null) { return dnAttribute.Name; }</code>
否则,返回 null:
<code class="language-csharp"> return null;</code>
为了更广泛的适用性,将该方法泛化以处理任何属性:
<code class="language-csharp">public static class AttributeExtensions { public static TValue GetAttributeValue<TAttribute, TValue>( this Type type, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute }</code>
扩展方法内部:
检索自定义属性:
<code class="language-csharp"> var att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute;</code>
如果属性存在,则使用提供的 valueSelector
来提取所需的值:
<code class="language-csharp"> if (att != null) { return valueSelector(att); }</code>
否则,返回该类型的默认值:
<code class="language-csharp"> return default(TValue);</code>
MyClass
的 DomainName
属性:<code class="language-csharp">string name = typeof(MyClass).GetDomainName<MyClass>();</code>
MyClass
的任何属性值:<code class="language-csharp">string name = typeof(MyClass) .GetAttributeValue<DomainNameAttribute, string>((DomainNameAttribute dna) => dna.Name);</code>
以上是如何在运行时动态检索类的属性值?的详细内容。更多信息请关注PHP中文网其他相关文章!