这是源代码
bool v = false;
object x = v switch {
true => 0.0f,
false => 100L,
};
模式匹配为 2 个分支返回不同的数字类型,并且这些值将转换为 objct 作为基类
我希望 x 对于 true 分支是 float,对于 false 分支是 int,但结果是,返回值导出为 float
如果该值被装箱在分支中,那么它就起作用了
object x = v switch {
true => 0.0f as object,
false => 100L as object,
};
我可以从整体上理解模式匹配来得出这个结果,但我认为这是一个错误,有什么解释可以帮助我吗?
switch 表达式只能返回一种类型。 这里说的是:
switch_expression的类型是最佳通用类型 (§11.6.3.15) 出现在
右侧的表达式 switch_expression_arms 的标记(如果存在这种类型)并且 switch 表达式的每个臂中的表达式都可以隐式 转换为该类型。=>
Float 是 float 和 int 中最常见的类型,因此 switch 表达式会生成 float。