如何以非泛型方式获取类型的默认值?

Guu*_*ulh 5 c# default-value

我知道"default"关键字返回静态确定类型的默认值,如本问题中所示.

但是,给定一个类型的实例,是否有一种简单的方法来动态获取此类型的默认值?我发现谷歌搜索,而唯一的办法是这样:

static object DefaultValue(Type myType)
{
    if (!myType.IsValueType)
        return null;
    else
        return Activator.CreateInstance(myType);
}
Run Code Online (Sandbox Code Playgroud)

但是如果可能的话我想避免使用Activator类.

Jon*_*eet 7

为什么要避免使用Activator?基本上这就是这样做的方式.

我的意思是,你可以写一个通用的方法,然后通过反射调用它,但这是一个非常可怕的"长切",只是为了避免Activator.


Jar*_*Par 6

这可能是您最好的选择.

我不会害怕在这里使用Activator类.这是一个非常标准的类,它依赖于编译器.例如这个VB代码

Public Sub Example(Of T as New)()
  Dim x = new T()
End Sub
Run Code Online (Sandbox Code Playgroud)

大致翻译成这段代码

Public Sub Example(Of T As New)()
  Dim x = Activator.CreateInstance(OF T)
ENd Sub
Run Code Online (Sandbox Code Playgroud)