プリミティブなどの任意のタイプを許可するジェネリッククラスがあります。これに関する唯一の問題は、の使用default(T)
です。値型または文字列に対してdefaultを呼び出すと、それはそれを適切な値(空の文字列など)に初期化します。default(T)
オブジェクトを呼び出すと、nullが返されます。さまざまな理由により、プリミティブ型でない場合は、null ではなく、その型のデフォルトのインスタンスが存在することを確認する必要があります。これが試行1です。
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
問題-文字列は値の型ではありませんが、パラメーターのないコンストラクターがありません。したがって、現在の解決策は次のとおりです。
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
しかし、これはクラッジのように感じます。文字列のケースを処理するより良い方法はありますか?