T
ジェネリック型にしましょう。私はこのようなことをしたいと思います:
T x = default(T);
if (T has standard constructor)
x = new T();
もちろん、そのT
ようなコンストラクターを持つ型に制限することもできますが、値型を除外したくありません。
どうやってそれができる?
T
ジェネリック型にしましょう。私はこのようなことをしたいと思います:
T x = default(T);
if (T has standard constructor)
x = new T();
もちろん、そのT
ようなコンストラクターを持つ型に制限することもできますが、値型を除外したくありません。
どうやってそれができる?
リフレクションを使用する必要があります。
ConstructorInfo ci = typeof(T).GetConstructor(Type.EmptyTypes);
if (ci != null)
x = (T)ci.Invoke(null);
を使用することもできますがActivator.CreateInstance<T>()
、コンストラクターが存在しない場合は例外がスローされます。
編集:
質問は次のように述べています
もちろん、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();