c# 8.0 switch 表达式返回类型和空值

yau*_*nka 1 c# c#-8.0 switch-expression

我试图了解 C# 8.0 switch 表达式的工作原理,但有几个问题。

  1. 为什么null在默认情况下不能使用值?编译器抛出Cannot convert null to 'int' because it is a non-nullable value type错误。
  2. 为什么它试图将空值转换为int函数的返回类型是“double?”?

这是我正在玩的功能:

public static double? SwitchFunction(int x) =>
    x switch
    {
        1 => 1,
        _ => null
    };
Run Code Online (Sandbox Code Playgroud)

Kla*_*con 7

在 switch 表达式中,所有可能的值必须(隐式转换为)相同类型。因为您的第一种情况是1 => 1,并且您没有将整数文字转换为 以外的类型int,所以其余情况也将被假定int为也是。您需要将 1 强制转换(double?)为让编译器将其余情况也解释为double?可空类型 - 这将解决您的两个问题。