"int?"是一种引用类型吗?

24

int?int数据类型在幕后有什么区别?
int?是引用类型吗?

4个回答

43

5
除了“int?”是“Nullable”的快捷方式外,CLR还建立了基础设施,以便隐式且无声地在“int?”和“int”之间转换。这也意味着任何装箱操作都会隐式地将实际值装箱(即不可能将Nullable作为Nullable装箱,它始终会得到T的装箱值或空对象)。
当尝试在编译时不知道T(只在运行时知道)时创建Nullable时,我遇到了许多这些问题。 http://bradwilson.typepad.com/blog/2008/07/creating-nullab.html

4

如果您想深入了解 Nullable 类型的相关内容,建议阅读 Jeffrey Richter 的 CLR Via C#。该书的第 18 章详细讨论了 Nullable 类型。此外,该书还涵盖了许多其他 .NET CLR 内部的优秀知识。


-2

我了解到,必须将可空值类型显式转换为非可空值类型,如下面的示例所示:

int? n = null;

//int m1 = n;    // Doesn't compile
int n2 = (int)n; // Compiles, but throws an exception if n is null

微软文档


不,除非您完全确定已赋予其值,否则不应该这样做。Nullable结构有一个名为“HasValue”的属性和第二个包含实际值的属性。这将避免潜在的错误:if (n.HasValue) n2 = n.Value; - Cleptus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接