[英]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.