可爲空是一個結構體。我知道結構不能被分配'null'。那麼我們怎樣才能將Nullable的對象分配給null?是什麼原因?爲什麼可爲空<T>,struct,允許爲'null'
回答
它實際上並不接受值爲null
;它只是有語法糖,允許它行爲像它的null
。該類型實際上看起來有點像這樣:
struct Nullable<T>
{
private bool hasValue;
private T value;
}
所以當它的初始化hasValue == false
和value == default(T)
。
編寫代碼時喜歡
int? i = null;
C#編譯器其實就是做這一幕後:
Nullable<T> i = new Nullable<T>();
與同類將進行檢查,在運行時爲鑄造null
到int?
時好。
進一步閱讀
的我想他很想知道爲什麼id'DateTime? test = null'可能。 – MarcinJuraszek 2013-04-04 12:11:19
@ MarcinJuraszek:是的,這就是我的意思。或者可能是因爲可空的
@Sadiq它覆蓋了'Equals'方法。但是'int? test = null'實際上更多的是編譯器技巧。我在我的答案中包含了更多詳細信息的鏈接。 – 2013-04-04 12:26:04
- 1. 爲什麼T-SQL允許null和 'NULL'
- 2. 爲什麼允許空的wchar_t文字?
- 3. 爲什麼struct字段顯示爲空?
- 4. Sequelizejs - 爲允許爲空
- 5. EF6 - 註釋允許空字符串,但不允許爲null
- 6. %爲什麼不允許
- 7. 允許爲datagridview設置NULL?
- 8. 允許sscanf爲NULL arg?
- 9. 允許jTextField爲空?
- 10. 爲什麼不允許鎖定(<integer var>),但允許Monitor.Enter(<integer var>)?
- 11. 爲什麼條件運算符不能正確地允許使用「null」賦值給可爲空的類型?
- 12. 爲什麼PostgreSQL COPY命令不允許數組內的NULL值?
- 13. 爲什麼printf空格填充只允許一個空格?
- 14. Joi:「tel」不允許爲空
- 15. 當列爲空時,爲什麼bcp輸出爲null,而列爲空時爲空?
- 16. 爲什麼允許私人入口?
- 17. C - 爲什麼我允許這樣做?
- 18. 爲什麼Delegate.CreateDelegate允許無效轉換?
- 19. 爲什麼不允許密碼驗證?
- 20. 爲什麼java允許這樣做?
- 21. 爲什麼這個IF允許負數?
- 22. 爲什麼C#允許重寫異步?
- 23. 爲什麼Ruby 1.9允許覆蓋! !=!〜?
- 24. 爲什麼Swift允許雙選項?
- 25. 爲什麼sfinae如果constexpr不允許?
- 26. 爲什麼允許修改argv [0]?
- 27. 爲什麼filter_var($ email,FILTER_VALIDATE_EMAIL)允許test @ test?
- 28. 爲什麼VC++ 2010允許它編譯?
- 29. 爲什麼樣式表列不允許?
- 30. 爲什麼a,b = 1不允許?
可能重複的[爲什麼可空是一個結構?](http://stackoverflow.com/questions/4272101/why-nullablet-is -a-struct) –
V4Vendetta
2013-04-04 12:10:21
@ Nolonar:爲什麼這樣做?我的意思是如何分配一個結構對象爲空?它不可能被賦值爲空的結構對象。而Nullable本身就是一個結構體。 –
Sadiq
2013-04-04 12:12:59
*你*必須播放的規則不一定是編譯器和CLR可以播放的規則。 – 2013-04-04 12:15:24