「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 実行時にクラスから属性値を動的に取得するにはどうすればよいですか?

実行時にクラスから属性値を動的に取得するにはどうすればよいですか?

2025-02-07に投稿しました
ブラウズ:349

How Can I Dynamically Retrieve Attribute Values from a Class at Runtime?

ランタイム検索属性

この記事では、クラスのプロパティ値に動的にアクセスして抽出するための一般的な方法を紹介します。

特別な方法

を使用します

タイプパラメーターを受け入れる一般的な方法を定義します:

public string GetDomainName()
]]

メソッド内:

  • を使用します typeof(t).getCustomattributes を取得してカスタム属性を取得します:

      var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
      ).FirstOrDefault() as DomainNameAttribute;
  • プロパティが存在する場合、その値は返されます:

      if (dnAttribute != null)
      {
        return dnAttribute.Name;
      }
  • それ以外の場合、nullを返します:

      return null;
    ]

ユーティリティ拡張法

幅広い適用性については、この方法を一般化して属性を処理します。

public static class AttributeExtensions
{
    public static TValue GetAttributeValue(
        this Type type, 
        Func valueSelector) 
        where TAttribute : Attribute
}

内部拡張法:

  • カスタムプロパティを取得:

      var att = type.GetCustomAttributes(
        typeof(TAttribute), true
      ).FirstOrDefault() as TAttribute;
  • 属性が存在する場合、提供された ValuesElector を使用して必要な値を抽出します:

    ]
      if (att != null)
      {
        return valueSelector(att);
      }
  • それ以外の場合は、このタイプのデフォルト値を返します:

      return default(TValue);
    ]

使用例

  • domainname 属性の myclass
  • を取得します。
string name = typeof(MyClass).GetDomainName();
  • 拡張法を使用して myclass の属性値を取得します:
string name = typeof(MyClass)
    .GetAttributeValue((DomainNameAttribute dna) => dna.Name);
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3