gpt4 book ai didi

c# - 新的 C#7 模式匹配和可达性

转载 作者:太空狗 更新时间:2023-10-29 20:33:00 25 4
gpt4 key购买 nike

这是基于this问题,在我看来,这似乎是编译器中的语言故障或缺少警告。我的推理是 is 将始终在以下类型的表达式中返回 true:

int i;
if (i is var j) ....

更进一步,考虑以下代码:

int i;
if (i is int) .... //Compiler warning: The given expression is always
//of the provided ('int') type.

但是,与 var 一样,如果您这样做:

if (i is int j) ...
else ...

您不会收到任何警告(无论给定表达式始终为 true 或在 else 子句中检测到无法访问的代码)本质上是相同的行为。

这让我考虑我最初的推理是否有误。是否有一些模糊的使用/角落案例我错过了这真的有所作为?如果不是,那么缺少警告和不一致的行为是否是编译器中的疏忽(甚至错误)?

最佳答案

我相信这是设计使然,引用 roslyn 源代码,从这里开始:Binder_Operators, Line 2848

Because the heuristic presented here is used to change codegen, it must be conservative. It is acceptable for us to fail to report a warning in cases where humans could logically deduce that the operator will always return [true]. It is not acceptable to inaccurately warn that the operator will always return [true] if there are cases where it might [fail].

关于c# - 新的 C#7 模式匹配和可达性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com