为什么 C# 模式匹配为此返回 float?

问题描述 投票:0回答:1

这是源代码

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,
};

我可以从整体上理解模式匹配来得出这个结果,但我认为这是一个错误,有什么解释可以帮助我吗?

c# pattern-matching
1个回答
0
投票

switch 表达式只能返回一种类型。 这里说的是

switch_expression的类型是最佳通用类型 (§11.6.3.15) 出现在

=>
右侧的表达式 switch_expression_arms 的标记(如果存在这种类型)并且 switch 表达式的每个臂中的表达式都可以隐式 转换为该类型。

Float 是 float 和 int 中最常见的类型,因此 switch 表达式会生成 float。

© www.soinside.com 2019 - 2024. All rights reserved.