簡體   English   中英

C# 6.0 if 語句中的空條件運算符

[英]C# 6.0 null-conditional operator in if statements

有人可以解釋一下 if 語句中空條件運算符的邏輯嗎?

想象下面的代碼

List<string> items = null;
if (items?.Count == 0)
{
    Console.WriteLine("error");
}
else
{
    Console.WriteLine("OK");
}

以上將打印OK。 為什么下一個塊不會編譯時它會編譯?

if (items?.Any())    // won't compile but if (items?.Count() == 0) would
{
    ...
}

我猜的? 當檢測到 null 並跳過整個 if 時將停止執行,但為什么“?.Any()”不是這種情況? 僅僅因為它是一種方法,而“count”是一個屬性?

為什么 Linq 擴展方法 Any() 需要從 Nullable 到 bool 的顯式轉換,其中 Count() == 0 編譯時不需要將 Nullable 轉換為 int?

如果items是 null,那么items?.Count也是 null。
null == 0是導致錯誤的比較。 所以if是快樂的。

但是items?.Any()也將是 null - if(null)無效,因為 null 不是 boolean,不能轉換為一個。

所以你只需要提供一個后備 boolean 值:

if (items?.Any() ?? false) {

}

會成功的

考慮null案例。

if (items?.Count == 0)中,它變為if (null == 0)並給出錯誤。

但是在if (items?.Any())它變成if (null)並且這是無效的。

您可以使用if (items?.Any() == true)if (items?.Any()?? false)或類似的東西。

我注意到items.Count == 0是一個錯誤,但items == null在您的第一個示例中返回 Ok。
這很奇怪。

暫無
暫無

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

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