我已经做了一些研究,但还没有找到答案。在 c# 8 switch 表达式中是否有一个表示 null 情况的方式,编译器将x
在调用时识别并且不会触发基本情况下的引用警告ToString()
?看起来这是一个明显的案例,在这种情况下我不需要使用 null 宽恕运算符!
。
public override int? ConvertToInt(object? value) => value switch
{
var x when x == null => null,
int x => x,
var x => int.Parse(x!.ToString())
};
我有一种感觉,他们只是还没有解决这个问题,但我想我会把这个问题抛在那里。
编辑:
我确实想出了一种方法来消除对 null 宽恕运算符的需求,但我仍然很好奇是否有特定的 null case 语法被识别。这感觉不是最好的方法,因为它并不完全清楚,而且我什至不确定这是否会得到尊重,因为我认为 Nullable 引用实际上不会在运行时影响任何东西,我将很快对此进行测试。
public override int? ConvertToInt(object? value) => value switch
{
int x => x,
// notice the non-nullable object
object x => int.Parse(x.ToString()),
_ => null
};
编辑2:
看来我是误会了,这似乎很荣幸。运行以下测试时,断言没有失败。
[TestMethod]
public void MyTestMethod()
{
object? could_be_null = null;
string? str = could_be_null switch
{
object x => x.ToString(),
_ => null
};
Assert.IsNull(str);
}