可空类型如何在C#中工作?

时间:2008-09-21 04:15:31

标签: c#

'int?'之间的幕后差异是什么?和'int'? 'int?'某种程度上是一种参考类型?

4 个答案:

答案 0 :(得分:38)

?将值类型(T)包装在Nullable< T>中。结构:

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

答案 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

MS Document