0

任意の型のデフォルト/空の値で変数をインスタンス化するこの関数があるとしましょうnew

public static T GetDefault<T>() where T : new() //body of this method is the question
{
    T t = new T();
    return t;
}

上記の関数の問題は、 for のようなものがある場合int?ですT。私が持っている場合

int? t = new int?();

tnullになります!私はこれが起こらないようにしたくありません。代わりに、のデフォルト値intが返されることを望んでいます0

これを解決するために、などのGetDefault関数のさまざまなオーバーロードを使用できますが、それはエレガントではありません。関数の内部で型がorなどであるかどうかを確認することもできますが、その基本型をインスタンス化するにはどうすればよいでしょうか?int?bool?int?bool?

または、問題は、null 可能な構造体であるかどうかを識別する方法Tと、それに応じて null 可能な構造体をインスタンス化する方法に要約されます。

4

1 に答える 1

3
Type realType = Nullable.GetUnderlyingType(typeof(T));
t = (T)Activator.CreateInstance(realType ?? typeof(T));
于 2012-10-14T23:16:24.130 に答える