[英]Trying to understand ?. (null-conditional) operator in C#
我有這個非常簡單的例子:
class Program
{
class A
{
public bool B;
}
static void Main()
{
System.Collections.ArrayList list = null;
if (list?.Count > 0)
{
System.Console.WriteLine("Contains elements");
}
A a = null;
if (a?.B)
{
System.Console.WriteLine("Is initialized");
}
}
}
if (list?.Count > 0)
行編譯完美,這意味着如果list
為null
,則表達式Count > 0
默認為false
。
但是, if (a?.B)
行會引發編譯器錯誤,提示我不能隱式轉換bool?
bool
。
為什么一個與另一個不同?
list?.Count > 0
: 你在這里比較一個int?
到一個int
,產生一個bool
,因為提升的比較運算符返回一個bool
,而不是一個bool?
.a?.B
: 在這里,你有一個bool?
. 但是, if
需要一個bool
。在您的第一種情況下( list?.Count
),運算符返回一個int?
- 一個可以為空的int
。
>
運算符是為可空整數定義的,因此如果int?
沒有值(為空),比較將返回false
。
在你的第二個例子( a?.B
)一個bool?
返回(因為如果a
為 null,則既不是true
也不是false
,而是返回null
)。 和bool?
不能在if
語句中使用,因為if
語句需要(不可為空) bool
。
您可以將該語句更改為:
if (a?.B ?? false)
讓它再次工作。 因此,當空條件運算符 ( ?.
) 返回null
時,空合並運算符 ( ??
) 返回false
。
或者(正如 TheLethalCoder 建議的那樣):
if (a?.B == true)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.