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的类型。