実行時に属性値を動的に読み取る
ソフトウェア開発では、クラスまたはオブジェクトに関連付けられたプロパティに動的にアクセスする必要がある状況によく遭遇します。この機能は、リフレクション、構成の取得、動的コード生成などのさまざまなシナリオにとって重要です。
この記事では、C# で動的属性取得を実装する方法を検討し、2 つの異なる方法を示します。
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 中国語 Web サイトの他の関連記事を参照してください。