【发布时间】:2020-03-14 08:26:46
【问题描述】:
我正在尝试了解 C# 8.0 开关表达式的工作原理,但有几个问题。
- 为什么不能在默认情况下使用
null值?编译器抛出Cannot convert null to 'int' because it is a non-nullable value type错误。 - 为什么它试图将 null 值转换为
int而函数的返回类型是 'double?'?
这是我正在玩的函数:
public static double? SwitchFunction(int x) =>
x switch
{
1 => 1,
_ => null
};
【问题讨论】:
-
尝试将切换结果转换为
double?。所有switch响应都不是double?类型。 -
这类似于
var x = condition ? 1 : null;不起作用,因为编译器不够聪明,无法知道您想要int?。 -
编译器从您返回 int 值 (1) 的第一种情况推断出“int”类型。该开关的结果只会被转换为双倍?从通话中返回。
-
var x = condition ? 1 : (double)null;会起作用。 -
@JasonInVegas
Cannot convert null to 'double' because it is a non-nullable value type
标签: c# c#-8.0 switch-expression