【问题标题】:c# 8 switch expression not "smart" enoughc# 8 switch 表达式不够“聪明”
【发布时间】:2020-01-10 18:00:02
【问题描述】:

这段代码很简单,就是一个普通的开关:

bool? isSomething = strSomething switch
{
    "I" => true,
    "D" => false,
    _   => null,
};

但是,编译器给了我以下错误:

CS0037 无法将 null 转换为 'bool',因为它是不可为空的值类型

这个变量显然是一个可以为空的 bool bool?,为什么 c# 编译器不能在我不必强制转换 null 以使其工作的情况下解决这个问题:

_   => (bool?)null,

我没有做对吗?演员不是不必要的吗?

【问题讨论】:

  • 因为表达式通常不是目标类型的。 condition ? 1 : null 也失败了。也不是小事,如果将表情嵌入到更大的表情中呢?那么正确的类型是什么?

标签: switch-statement c#-8.0 switch-expression


【解决方案1】:

在 c# lang 中有一个为此打开的 issue #2387。对于 c# 9,可以在 this candidate 中修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2020-03-19
    • 2020-05-10
    • 2019-11-17
    • 2023-02-03
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多