为啥字符串可以为空? [复制]
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
是值类型的一个例子。以上是关于为啥字符串可以为空? [复制]的主要内容,如果未能解决你的问题,请参考以下文章