[英]C# is operator with nullable types always false according to ReSharper
[英]The += operator with nullable types in C#
在C#中,如果我寫的話
int? x = null;
x += x ?? 1
我希望這相當於:
int? x = null;
x = x + x ?? 1
因此在第一個例子中, x
將包含1
如第二個例子中所示。 但它沒有,它包含null。 + =運算符在尚未分配時似乎不適用於可空類型。 為什么會這樣呢?
編輯 :正如所指出的,這是因為null + 1 = null
和運算符優先級。 在我的辯護中,我認為MSDN中的這一行含糊不清!:
預定義的一元和二元運算符以及值類型存在的任何用戶定義的運算符也可以由可空類型使用。 如果[操作數]中的任何一個為空,則這些運算符產生空值; 否則,運算符使用包含的值來計算結果。
以下是兩個陳述之間的區別:
x += x ?? 1
x = (x + x) ?? 1
第二個不是你所期待的。
以下是它們的細分:
x += x ?? 1
x += null ?? 1
x += 1
x = x + 1
x = null + 1
x = null
x = x + x ?? 1
x = null + null ?? 1
x = null ?? 1
x = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.