在運行時動態讀取屬性值
在軟體開發中,您經常會遇到需要動態存取與類別或物件關聯的屬性的情況。這種能力對於各種場景至關重要,例如反射、配置檢索和動態程式碼生成。
本文探討如何在C#中實現動態屬性檢索,示範了兩種不同的方法:
1. 用於特定屬性類型的自訂方法:
要讀取特定屬性類型的屬性值,例如DomainName
屬性,您可以定義以下自訂方法:
<code class="language-csharp">public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute; if (dnAttribute != null) { return dnAttribute.Name; } return null; }</code>
2. 用於任何屬性類型的泛型擴充方法:
為了使屬性檢索過程通用化並支援任何屬性類型,您可以建立下列泛型擴充方法:
<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 att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute; if (att != null) { return valueSelector(att); } return default(TValue); } }</code>
使用方法:
這兩種方法都允許您在運行時取得DomainName
屬性值,如下所示:
<code class="language-csharp">// 使用自定义方法 string domainNameValue = GetDomainName<MyClass>(); // 使用扩展方法 string name = typeof(MyClass) .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
以上是如何在運行時動態讀取C#中的屬性值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!