渡された型のデフォルト値を返す汎用メソッドが必要ですが、コレクション型の場合は、null ではなく空のコレクションを取得したいと思います。次に例を示します。
GetDefault<int[]>(); // returns empty array of int's
GetDefault<int>(); // returns 0
GetDefault<object>(); // returns null
GetDefault<IList<object>>(); // returns empty list of objects
私が書き始めた方法は次のとおりです。
public static T GetDefault<T>()
{
var type = typeof(T);
if(type.GetInterface("IEnumerable") != null))
{
//return empty collection
}
return default(T);
}
それを完了する方法は?
編集:型識別子の代わりに型インスタンスに 基づいて、誰かが何らかの型のデフォルト値を取得したい場合は、以下のこの構造を使用できます。つまり:
typeof(int[]).GetDefault();
実装は @ 280Z28 の回答に基づいています。
public static class TypeExtensions
{
public static object GetDefault(this Type t)
{
var type = typeof(Default<>).MakeGenericType(t);
var property = type.GetProperty("Value", BindingFlags.Static | BindingFlags.Public);
var getaccessor = property.GetGetMethod();
return getaccessor.Invoke(null, null);
}
}