为啥字符串可以为空? [复制]

Posted

技术标签:

【中文标题】为啥字符串可以为空? [复制]【英文标题】:Why is string nullable? [duplicate]为什么字符串可以为空? [复制] 【发布时间】:2012-12-31 12:00:38 【问题描述】:

可能重复:The type ‘string’ must be a non-nullable type in order to use it as parameter T in the generic type or method ‘System.Nullable<T>’

正如标题所说,为什么 C# 中的字符串默认可以为空,但如果我想,比如 ints 或 doubles 为空,我必须明确地这么说?

【问题讨论】:

因为字符串是引用类型。 @JW。 - 我不认为这些问题是相同的。这比建议的副本更普遍。 【参考方案1】:

因为 string 是引用类型,派生自 object 并且 [大多数] 其他默认类型是值类型,隐式派生自 System.ValueType;

【讨论】:

+1。 “源自struct”并不完全正确 - msdn.microsoft.com/en-us/library/s1ax56ch(v=vs.100).aspx:“所有值类型都隐式地从 System.ValueType 派生。” 而ValueType也派生自对象,但这并不意味着它是一个引用类型。你的陈述大部分是准确的,但我会考虑改写一下 好点,提供的链接肯定比我的单行更完整。 这不是一个好的答案。它只是在陈述显而易见的事情。我们知道这是一种参考类型,我们想知道为什么!我知道在 C++ 中字符串是一个类而不是原语,但 C# 不是 C++ 并且有很多差异(包括它如何处理“原语”)。那么为什么不将字符串作为值类型而不是引用类型来处理呢? @psubsee2003 类System.ValueType 本身就是一个引用类型。例如,您可以说ValueType vt1 = null;ValueType vt2 = DateTime.Now; /* boxing */。但是DateTime 是值类型的一个例子。

以上是关于为啥字符串可以为空? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥检查字符串是不是为空的函数总是返回true? [关闭]

mybatis 空字符串 为啥变为null

为啥initializer_list中的字符串内容为空?

为啥没有结果时 ResultSet 不为空? [复制]

为啥 DOM 元素为空? [复制]

为啥在这个例子中空字符串可以工作,而 this.state.foo 不行? [复制]