ホームページ >バックエンド開発 >C++ >実行時に C# で属性値を動的に読み取る方法

実行時に C# で属性値を動的に読み取る方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-12 06:01:43329ブラウズ

How to Dynamically Read Attribute Values in C# at Runtime?

実行時に属性値を動的に読み取る

ソフトウェア開発では、クラスまたはオブジェクトに関連付けられたプロパティに動的にアクセスする必要がある状況によく遭遇します。この機能は、リフレクション、構成の取得、動的コード生成などのさまざまなシナリオにとって重要です。

この記事では、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。