gpt4 book ai didi

C# switch 表达式不正确的可空性

转载 作者:行者123 更新时间:2023-12-02 02:34:12 25 4
gpt4 key购买 nike

我在使用 switch expression 时注意到其中包含 null 检查作为范围表达式,arms/cases 中值的可为空状态在 Visual Studio (16.7.6) 中无法正确解释。例如:

string? value = GetSomeString();
var description = (value != null) switch
{
true when value.Length == 0 => "Empty",
true when value.Length == 1 => "Uno",
true when value.Length == 3 => "Third time's a charm",
_ => "null"
};

在这里,我希望知道在 switch block 中,考虑到我们要打开的条件,value 的所有实例都不为空。最后/默认情况处理空情况。然而,Visual Studio 认为第一个实例可能为 null:

enter image description here

我做错了什么吗?这是分析器的错误还是其他原因?

最佳答案

您正在切换以下条件:(value != null),其计算结果为 true 或 false。尽管如此,在 switch 表达式内部时,变量 value 本身仍然可以为 null,因此该提示实际上是正确的。每当 (value != null) 的结果为 false 时,您仍然会进入 switch 主体,并且 value 将为 null。总之,无论value是否为空,开关主体都会被执行。

编辑:

从头开始,我错了,你是对的。 value 在特定条件下不会为 null,但在 switch 主体中可能为 null。你的 Visual Studio 有一些有趣的东西,这就是我得到的(我使用的是 VS 16.4.5),没有警告:

enter image description here

关于C# switch 表达式不正确的可空性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64564918/

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