この記事では、クラスの属性値に動的にアクセスして抽出する一般的な方法を紹介します。
型パラメータを受け入れるジェネリック メソッドを定義します:
<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 中国語 Web サイトの他の関連記事を参照してください。