9

ジェネリッククラスを実装しようとしています。パラメータ型の名前として設定したいコンパイル時の定数を取る属性を持つプロパティが必要です。このようなもの:

namespace Example
{
    public class MyGeneric<T>
    {
        [SomeAttribute(CompileTimeConstant)]
        public int MyProperty { get; set; }

        private const string CompileTimeConstant = typeof(T).Name; // error CS0133:
        // The expression being assigned to `Example.MyGeneric<T>.CompileTimeConstant' must be constant
    }
}

ただしtypeof(T).Name、実行時に評価されるため、機能しません。出来ますか?

4

1 に答える 1

1

これは属性の正しい使用方法ではないと思います。属性は、クラスに特定の特性を追加するために存在します。これらは、コンパイル時にクラスに追加して実行時に照会および使用するタグです。実行時に属性を追加して、それをどのように使用しようとしていますか? 実行時に利用可能な情報を保持するために属性を使用するのはなぜですか?

型の名前は、実行時に簡単に照会できます。正確に何を達成したいのかについて、より多くの情報を提供する必要があると思います。それ以外の場合は、TypeNameプロパティを使用するだけで十分だと思います。

于 2014-06-04T17:48:17.220 に答える