'int?'之间的幕后差异是什么?和'int'? 'int?'某种程度上是一种参考类型?
答案 0 :(得分:38)
?将值类型(T)包装在Nullable< T>中。结构:
答案 1 :(得分:5)
除了“int?”作为“Nullable”的快捷方式,还有基础设施放入CLR,以隐式和无声地在“int?”之间进行转换。和“int”。这也意味着任何装箱操作都会隐式地封装实际值(即,不可能将Nullable设置为Nullable,它总是导致T的盒装值或空对象)。
当你在编译时不知道T时尝试创建Nullable时遇到了很多这些问题(你只在运行时知道它)。 http://bradwilson.typepad.com/blog/2008/07/creating-nullab.html
答案 2 :(得分:4)
对于关于Nullable类型的更好的“幕后”讨论之一,你应该看看Jeffrey Richter的CLR Via C#。
第18章的全部内容专门讨论Nullable类型。本书也适用于.NET CLR内部的许多其他领域。
答案 3 :(得分:-1)
我了解到,您必须将可空值类型显式转换为不可空值类型,如以下示例所示:
int? n = null;
//int m1 = n; // Doesn't compile
int n2 = (int)n; // Compiles, but throws an exception if n is null