【问题标题】:How can I get the default value of a type in a non-generic way?如何以非泛型方式获取类型的默认值?
【发布时间】:2010-10-05 22:31:27
【问题描述】:

我知道“default”关键字返回静态确定类型的默认值,例如this question 中所示。

但是,给定一个类型的实例,是否有一种简单的方法可以动态地获取该类型的默认值? 我在谷歌搜索时发现的唯一方法是this

static object DefaultValue(Type myType)
{
    if (!myType.IsValueType)
        return null;
    else
        return Activator.CreateInstance(myType);
}

但如果可能,我想避免使用 Activator 类。

【问题讨论】:

标签: c# default-value


【解决方案1】:

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

我的意思是,您可以编写一个通用方法,然后通过反射调用它,但这是一个非常可怕的“长切”,只是为了避免使用 Activator。

【讨论】:

    【解决方案2】:

    这可能是您最好的路线。

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

    Public Sub Example(Of T as New)()
      Dim x = new T()
    End Sub
    

    大致翻译成这段代码

    Public Sub Example(Of T As New)()
      Dim x = Activator.CreateInstance(OF T)
    ENd Sub
    

    【讨论】:

    • 这是泛型(OP 希望避免),与“默认”不同 - 它应该为类返回 null。
    • 非常感谢!我知道反射功能非常强大,但是当有简单的解决方案时我不愿意使用它。但如果别无选择,那就顺其自然吧:)
    • @Marc,非常正确,我主要是想举一个例子说明 Activator 不是 evil
    • 我非常同意 - 只是它似乎没有回答最初的问题......哦,好吧,OP很高兴,至少...... ;-p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2022-08-05
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多