[英]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
字段(例如HasValue
, null == false
。
由於Nullable<T>
變量是一種結構,因此始終可以引用該變量,因為其內容為null,而不是變量本身。
在MSDN頁面struct的“備注”部分中有關於結構的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.