c# 8 switch 表达式不够“聪明”
Posted
技术标签:
【中文标题】c# 8 switch 表达式不够“聪明”【英文标题】:c# 8 switch expression not "smart" enough 【发布时间】: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
也失败了。也不是小事,如果将表情嵌入到更大的表情中呢?那么正确的类型是什么?
【参考方案1】:
在 c# lang 中有一个为此打开的 issue #2387。对于 c# 9,可以在 this candidate 中修复。
【讨论】:
以上是关于c# 8 switch 表达式不够“聪明”的主要内容,如果未能解决你的问题,请参考以下文章
c# 8 switch 表达式:没有找到 switch 表达式的最佳类型