簡體   English   中英

“。” null上的運算符nullable

[英]The '.' operator on null nullable

如何訪問null nullable的屬性HasValue
我查看了編譯后的代碼,它不是語法糖。

為什么這不會引發NullReferenceException:

int? x = null;
if (x.HasValue)
{...}

那是因為int? Nullable<int>縮寫,它是一個值類型,而不是引用類型-因此您將永遠不會獲得NullReferenceException

Nullable<T>結構看起來像這樣:

public struct Nullable<T> where T : struct
{
    private readonly T value;
    private readonly bool hasValue;
    //..
}

當您為null賦值時,編譯器會發生一些不可思議的事情(它知道Nullable<T>並以這種方式對它們進行特殊處理),它為此實例將hasValue字段設置為hasValue然后由HasValue屬性返回。

就像BrokenGlass所說的,是int? 實際上是Nullable<T>

結構始終包含一個值。 通常,您不能將結構變量設置為null,但是在這種特殊情況下,您可以將其本質上設置為default(Nullable<T>) 這會將其內容設置為null而不是變量本身。

Nullable<T>設置為值時,它使用隱式運算符將Value = value設置為新值,並且HasValue = true

Nullable<T>設置為null時,它將使結構的所有字段都為空。 對於bool字段(例如HasValuenull == false

由於Nullable<T>變量是一種結構,因此始終可以引用該變量,因為其內容為null,而不是變量本身。

在MSDN頁面struct的“備注”部分中有關於結構的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM