如何用类型调用default(T)?

在c#中,我可以使用default(T)来获取类型的默认值。 我需要在运行时从System.Type获取默认类型。 我怎样才能做到这一点?

例如某事(这不起作用)

 var type = typeof(int); var defaultValue = default(type); 

对于引用类型,返回null ,对于值类型,您可以尝试使用Activator.CreateInstance或调用该类型的默认构造函数。

 public static object Default(Type type) { if(type.IsValueType) { return Activator.CreateInstance(type); } return null; } 

如果您正在尝试构建表达式树,请使用Expression.Default

 Expression expression = Expression.Default(type); 

另一种可以相当容易地做到这一点的方法是:

 object defaultValue = Array.CreateInstance(type, 1).GetValue(0); 

丑陋,但它会工作:)请注意,很难获得可空类型的默认值,因为它将始终被装箱为空引用。

正如评论中所指出的那样,有一些模糊的场景( void和指针类型),这些场景并不等同,但它们是角落情况:)

这很简单,你只需考虑2个案例:

  • 引用类型:默认值始终为null
  • 值类型:您可以使用Activator.CreateInstance轻松创建实例

     public static object GetDefaultValue(Type type) { if (type.IsValueType) { return Activator.CreateInstance(type); } else { return null; } } 

你也可以考虑使用FormatterServices.GetUninitializedObject而不是Activator.CreateInstance ,它可能更快。