【问题标题】:Non-generic function to get the default value of a system.type获取 system.type 的默认值的非泛型函数
【发布时间】:2014-07-02 23:09:56
【问题描述】:

我只会在运行时知道类型。

Public Shared Function DefaultValue(Type As System.Type) As Object
  '???
End Function

任何人都可以填写函数吗?谢谢!

编辑: 经过回答和更多讨论,我了解到您可以这样做:

MyExpression = Nothing

确定表达式是否包含其类型的默认值。在我的库中拥有共享函数可能会帮助我记住关于语言的这一点,但否则该函数不是必需的。感谢 Dave 指出这一点。

【问题讨论】:

  • .NET - Get default value for a reflected PropertyInfo 的可能重复项 - 请参阅@MarkJones 的回答(不是被接受的)。
  • @MarcinJuraszek,请让他们填写函数。从未有人以如此简单直接的方式提出过这个问题。谢谢!
  • 一个Type的默认值还是一个property类型的默认值?
  • @Plutonix,任何 System.Type。函数的签名正是我要问的。
  • @MarcinJuraszek,这可以并且将在反射之外使用。这是一个不同的问题。

标签: vb.net


【解决方案1】:

我认为有一个非常简单的方法可以解决这个问题:如果类型不是值类型,则不返回任何内容,否则返回该类型的新实例,该实例将被初始化为默认值:

Public Shared Function DefaultValue(Type As System.Type) As Object
    If Not Type.IsValueType Then
        Return Nothing
    Else
        Return Activator.CreateInstance(Type)
    End If
End Function

【讨论】:

  • 你一定是我的精神分裂者。你的功能是我昨天在我的图书馆里输入的一个字一个字。我只是不想回答我自己的问题。谢谢哥们!
  • 这太过分了——VB中的“Nothing”同时处理引用和值类型。
  • @DaveDoknjas:是的,当你将它转换为 C# 时,另一个 VB 快捷方式或假设会咬你。在经历了 2 年前将大量 VB 转换为 C# 的“乐趣”之后,我们现在在所有代码审查中都坚持尽可能多地使用标准框架功能。而且“矫枉过正”是非常主观的。这段代码本质上是自记录的,可以用作其他功能的基础,因为 Nothing 的使用必须彻底记录。
  • @competent_tech:由于问题是在 VB 中,我认为 VB 的答案是合适的。不过你是对的 - VB 中的“Nothing”可能会令人困惑,尤其是对 C# 开发人员而言。
猜你喜欢
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 2016-01-01
  • 2017-06-20
相关资源
最近更新 更多