2013-04-04 80 views
1

可爲空是一個結構體。我知道結構不能被分配'null'。那麼我們怎樣才能將Nullable的對象分配給null?是什麼原因?爲什麼可爲空<T>,struct,允許爲'null'

+1

可能重複的[爲什麼可空是一個結構?](http://stackoverflow.com/questions/4272101/why-nullablet-is -a-struct) – V4Vendetta 2013-04-04 12:10:21

+1

@ Nolonar:爲什麼這樣做?我的意思是如何分配一個結構對象爲空?它不可能被賦值爲空的結構對象。而Nullable 本身就是一個結構體。 – Sadiq 2013-04-04 12:12:59

+0

*你*必須播放的規則不一定是編譯器和CLR可以播放的規則。 – 2013-04-04 12:15:24

回答

6

它實際上並不接受值爲null;它只是有語法糖,允許它行爲像它的null。該類型實際上看起來有點像這樣:

struct Nullable<T> 
{ 
    private bool hasValue; 
    private T value; 
} 

所以當它的初始化hasValue == falsevalue == default(T)

編寫代碼時喜歡

int? i = null; 

C#編譯器其實就是做這一幕後:

Nullable<T> i = new Nullable<T>(); 

與同類將進行檢查,在運行時爲鑄造nullint?時好。

進一步閱讀

+0

我想他很想知道爲什麼id'DateTime? test = null'可能。 – MarcinJuraszek 2013-04-04 12:11:19

+0

@ MarcinJuraszek:是的,這就是我的意思。或者可能是因爲可空的重載操作符。像==操作符?不知道確定。 – Sadiq 2013-04-04 12:19:39

+1

@Sadiq它覆蓋了'Equals'方法。但是'int? test = null'實際上更多的是編譯器技巧。我在我的答案中包含了更多詳細信息的鏈接。 – 2013-04-04 12:26:04