2011-08-06 618 views
7

我是C#的新手,刚刚得知C#中的对象可以为null,但int不能。为什么int不能为空?如何在C#中使用可空int(int?)?

还怎么做在C#可空INT(int?)的工作?

+3

我会投资一本关于C#的好书。你一定会对这样的基本语法有更多的问题,并且单独询问SO会花费很多时间。 –

+0

http://stackoverflow.com/questions/6191339/why-type-in​​t-is-never-equal-to-null – Bart

+1

@Bart:我查看已经封闭,链接到一个jleedev愚弄的人,但这个问题更具体到C#可空值类型... – BoltClock

回答

1

对象是引用类型和他们可以引用Nothing或Null,但int是值类型,只能容纳一个值,而不能引用任何东西。

1

值类型,如int包含直接的值,而不是像ReferenceType引用。值不能为空,但引用可以为空,这意味着它不指向任何内容。一个值不能包含任何内容。值总是包含某种价值

可为空或可空类型是特殊值类型里面除了值类型的正常值还支持额外的空值就像引用类型

2

的int是值类型。它确实是Int32类型的。可以为空的对象是引用类型。在基本级别上,区别在于值类型会将值与变量一起存储,其中参考类型将存储对该值的引用。引用可以为null,这意味着它不指向值。值类型始终有一个值。

可空值包装值类型以允许您选择为空。使用int?只是一个声明可为空类型的编译器快捷方式。

0

原始的int类型不能表达它的二进制表示null,但Nullable<int>添加一个额外的字节来表示该值的空信息。

+0

有人给出了投票应该显示的原因。可为空在结构体定义中增加一个额外的私有布尔值'hasValue'来表示int的空值,另外,CLR在与null比较时需要稍微修改以处理这个特殊结构。原始int不能表示为空,因为它的所有二进制排列表示int的值,条件是它在堆栈中有4个字节。 – Thomson

+0

我没有降低它的效果,但可能是因为在没有任何支持文档的情况下引用了关于内存布局的模糊事实。否则,我不确定。 – recursive

2

您可以通过使用INT可为空的诠释?或者Nullable<int>都是完全一样的东西。

相关问题