我試圖使用新的C#7的模式匹配功能,在這行代碼在收到警告「該人士表達模式的類型的始終,對所有非空值相符」
if (Customers.SingleOrDefault(x => x.Type == CustomerType.Company) is Customer customer)
{
...
}
但對於一些原因ReSharper的/ Visual Studio的2017年是給我一個警告is Customer
下,出現以下消息
源表達模式的類型的始終,對所有 非空值相匹配
但是customer
也可以是null
對不對?任何人都可以向我解釋爲什麼會發出此警告?
你想達到什麼目的? –
雖然沒有更好的方法來編寫這個表達式來檢查非空值,但ReSharper告訴你,如果你已經知道每個元素都是一個Customer,你爲什麼明確地要求它檢查它是否是一個客戶?它基本上說「這看起來很腥」。它不會說「這是錯誤的」。說實話,我認爲ReSharper是對的。如果我看到「Customers」是「Customer」的集合,我也會對這個表達式感到疑惑。只是明確地檢查內部的非空內容會更加清楚。 –
我會同意這是來自R#的一個愚蠢的警告。 「...匹配所有非空值」正是你在這裏想要的,所以R#沒有任何意義可以警告你,你的代碼將按照你想要的方式工作。我建議在[ReSharper問題跟蹤器](https://confluence.jetbrains.com/display/ReSharper/ReSharper+Issue+Tracker)上提出這個問題。 –