C# switch 表达式 null 大小写
Posted
技术标签:
【中文标题】C# switch 表达式 null 大小写【英文标题】:C# switch expressions null case 【发布时间】:2020-04-30 19:00:35 【问题描述】:我已经做了一些研究,但还没有找到答案。在调用ToString()
时,在基本情况下,编译器将识别并且不会触发对引用x
的警告。看起来这是一个明显的案例,在这种情况下我不需要使用 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);
【问题讨论】:
【参考方案1】:经过原始问题的编辑中显示的一些实验后,我想出了这个解决方案。令我惊讶的是,在运行时检查了引用类型的可空性。这是我能想到的最好的,如果有人能想出更好的东西,或者有我不知道的 null 情况的官方语法,我很乐意接受你的回答而不是我的回答。
public override int? ConvertToInt(object? value) => value switch
int x => x,
// notice the non-nullable object
object x => int.Parse(x.ToString()),
_ => null
;
【讨论】:
以上是关于C# switch 表达式 null 大小写的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中的 switch 表达式中创建一个空的默认情况?
c# 8 switch 表达式:没有找到 switch 表达式的最佳类型