【问题标题】:In .NET, at runtime: How to get the default value of a type from a Type object? [duplicate]在 .NET 中,在运行时:如何从 Type 对象获取类型的默认值? [复制]
【发布时间】:2011-02-10 19:34:26
【问题描述】:

可能重复:
Default value of a type

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

var DefaultValue = default(bool);`

但是,如何为提供的 Type 变量获取相同的默认值?

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

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

【问题讨论】:

  • 这与"Default value of a type" 几乎相同。 Codeka 提供了一个很好的answer,我认为这会对您有所帮助。
  • 返回默认值(ObjectType)不起作用?

标签: c# .net runtime types


【解决方案1】:

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

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

【讨论】:

  • 就是这样!我用结构、枚举、值和引用类型对其进行了测试,效果很好。谢谢!
【解决方案2】:

您也应该排除 Nullable<T> 的情况,以减少一些 CPU 周期:

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

【讨论】:

  • 您正在以非 Nullable 类型为代价优化 Nullables。
猜你喜欢
  • 2013-01-27
  • 2011-03-01
  • 2011-01-17
  • 1970-01-01
  • 2014-04-01
  • 2011-01-30
  • 1970-01-01
  • 2011-07-12
相关资源
最近更新 更多