C# 在.NET中,在运行时:如何从类型对象获取类型的默认值?

C# 在.NET中,在运行时:如何从类型对象获取类型的默认值?,c#,.net,runtime,types,C#,.net,Runtime,Types,可能重复: 在C#中,要获取类型的默认值,我可以编写 var DefaultValue = default(bool);` 但是,如何为提供的类型变量获取相同的默认值 public object GetDefaultValue(Type ObjectType) { return Type.GetDefaultValue(); // This is what I need } 或者,换句话说,“default”关键字的实现是什么?我认为Frederik的函数实际上应该是这样的: p

可能重复:

在C#中,要获取类型的默认值,我可以编写

var DefaultValue = default(bool);`
但是,如何为提供的类型变量获取相同的默认值

public object GetDefaultValue(Type ObjectType)
{
    return Type.GetDefaultValue();  // This is what I need
}

或者,换句话说,“default”关键字的实现是什么?

我认为Frederik的函数实际上应该是这样的:

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

您可能也应该排除
Nullable
情况,以减少一些CPU周期:

public object GetDefaultValue(Type t) {
    if (t.IsValueType && Nullable.GetUnderlyingType(t) == null) {
        return Activator.CreateInstance(t);
    } else {
        return null;
    }
}

这几乎是重复的。Codeka提供了一个很好的方法,我认为它会帮助您。返回默认值(ObjectType)不起作用?就是这样!我用struct、enum、value和reference类型对它进行了测试,效果非常好。谢谢您正在以不可为null的类型为代价优化可为null的类型。