任意の型のデフォルト/空の値で変数をインスタンス化するこの関数があるとしましょう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?();
t
nullになります!私はこれが起こらないようにしたくありません。代わりに、のデフォルト値int
が返されることを望んでいます0
。
これを解決するために、などのGetDefault
関数のさまざまなオーバーロードを使用できますが、それはエレガントではありません。関数の内部で型がorなどであるかどうかを確認することもできますが、その基本型をインスタンス化するにはどうすればよいでしょうか?int?
bool?
int?
bool?
または、問題は、null 可能な構造体であるかどうかを識別する方法T
と、それに応じて null 可能な構造体をインスタンス化する方法に要約されます。