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

Gid*_*sey 6 .net c# reflection

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

例如某事(这不起作用)

var type = typeof(int);
var defaultValue = default(type);
Run Code Online (Sandbox Code Playgroud)

Jul*_*rau 9

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

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

   return null;
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 6

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

Expression expression = Expression.Default(type);
Run Code Online (Sandbox Code Playgroud)

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

object defaultValue = Array.CreateInstance(type, 1).GetValue(0);
Run Code Online (Sandbox Code Playgroud)

很丑,但它会工作:)请注意,很难获得可空类型的默认值,因为它总是被装箱为空引用.

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