收到警告“源表达式始终是模式类型,匹配所有非空值”

Jes*_*ica 5 c# resharper pattern-matching c#-7.0 visual-studio-2017

我正在尝试在这行代码中使用新的 C# 7 模式匹配功能

if (Customers.SingleOrDefault(x => x.Type == CustomerType.Company) is Customer customer)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,Resharper/Visual Studio 2017 给我一个警告,is Customer并显示以下消息

源表达式始终是模式类型,匹配所有非空值

不过customer也可以null吧?任何人都可以向我解释为什么它会给出这个警告吗?

Pau*_*ado 3

你说得对!

ReSharper(不是 Visual Studio)实际上是正确的,尽管我不知道为什么这会是一个警告。

虽然Customers是 的集合Customer,但使用SingleOrDefault提示该值可能null不是Customer

没有什么说所有来自的值Customers都是非的null

  • 为什么要复杂呢?我的阅读方式是“给我客户......如果存在,请将其放入客户变量中”。 (7认同)
  • 另一方面,这是一个复杂的非空检查,这可能就是 ReSharper 发出警告的原因。 (2认同)