在 C# 中動態存取類別屬性
在運行時存取類別屬性是動態檢索元資料或配置資訊的強大技術。 這可以使用 C# 的反射功能來實現。
擷取特定屬性(DomainNameAttribute):
通用方法 GetDomainName<T>
簡化了從任何類別檢索 DomainNameAttribute
的過程:
<code class="language-csharp">public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes(typeof(DomainNameAttribute), true) .FirstOrDefault() as DomainNameAttribute; return dnAttribute?.Name; }</code>
使用範例:
<code class="language-csharp">// Returns "MyTable" (assuming myclass has the attribute) string domainName = GetDomainName<myclass>();</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 { var attribute = type.GetCustomAttributes(typeof(TAttribute), true) .FirstOrDefault() as TAttribute; return attribute != null ? valueSelector(attribute) : default(TValue); } }</code>
使用範例:
<code class="language-csharp">string name = typeof(MyClass).GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
此方法採用屬性類型和 lambda 表達式來從屬性實例中選擇所需的屬性值。 這為存取各種屬性屬性提供了靈活性。
以上是如何在 C# 中在運行時讀取類別屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!