我想要一个通用方法,它返回传递类型的默认值,但对于集合类型,我想获得空集合而不是 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);
    }
}