2011-08-06 93 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>都是完全一樣的東西。

相關問題