首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >收到警告:“源表达式总是模式的类型,匹配所有非空值”。

收到警告:“源表达式总是模式的类型,匹配所有非空值”。
EN

Stack Overflow用户
提问于 2017-08-01 05:54:37
回答 2查看 961关注 0票数 5

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

代码语言:javascript
运行
复制
if (Customers.SingleOrDefault(x => x.Type == CustomerType.Company) is Customer customer)
{
    ...
}

但出于某种原因,Resharper/VisualStudio2017在is Customer下给我一个警告,并给出以下消息

源表达式总是模式的类型,匹配所有非空值。

但是customer也可以是null,对吗?有人能给我解释一下为什么会发出这样的警告吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-01 06:31:57

你是对的!

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

虽然CustomersCustomer的集合,但是SingleOrDefault的使用暗示值可能是null,而不是Customer

没有什么能说明Customers产生的所有值都是非null的。

票数 3
EN

Stack Overflow用户

发布于 2020-04-18 10:43:46

如果将is Customer customer替换为is {} customer (需要C# 8),则警告将消失。

顺便说一下,JetBrains 建议这个解决方案,它在重构代码时有一些优点。

但是,如果您发现具有确切类型的代码更具可读性,并且希望在更改类型(例如强制检查)时让编译器失败,则只需完全禁用警告即可。请注意,在这两种情况下,编译的代码(包括IL和JITted)都是相同的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45429913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档