0

Tジェネリック型にしましょう。私はこのようなことをしたいと思います:

T x = default(T);
if (T has standard constructor)
  x = new T();

もちろん、そのTようなコンストラクターを持つ型に制限することもできますが、値型を除外したくありません。

どうやってそれができる?

4

2 に答える 2

2

リフレクションを使用する必要があります。

ConstructorInfo ci = typeof(T).GetConstructor(Type.EmptyTypes);
if (ci != null)
    x = (T)ci.Invoke(null);

を使用することもできますがActivator.CreateInstance<T>()、コンストラクターが存在しない場合は例外がスローされます。

于 2012-07-25T18:59:45.090 に答える
0

編集:

質問は次のように述べています

もちろん、Tをそのようなコンストラクターを持つ型に制限することもできますが、値型を除外したくありません。

T以下に示す制約の使用は、参照型に限定されません。別の理由で他のコンストラクターをサポートする必要がある場合は、質問を更新してください。


(事前編集:結局のところ質問には適用されない場合があります)

new制約(パラメーターなしのコンストラクター制約とも呼ばれます)を探しています:

class YourClass<T> where T : new()
{
    public T doSomething()
    {
        return new T();
    }
}

Tたとえば、値型にすることは間違いなく許可されています。

YourClass<char> c = new YourClass<char>();
char result = c.doSomething();
于 2012-07-25T18:56:47.033 に答える