一尘不染

深度null检查,还有更好的方法吗?

c#

注意: 这个问题是在引进之前问.?用C#操作6 /的Visual Studio
2015年

我们都去过那里,我们有一些很深的属性,例如cake.frosting.berries.loader,我们需要检查它是否为null,因此也不例外。要做的方法是使用短路if语句

if (cake != null && cake.frosting != null && cake.frosting.berries != null) ...

这并不十分优雅,也许应该有一种更简单的方法来检查整个链,看看它是否与空变量/属性相关。

是否可以使用某些扩展方法,或者它是语言功能,还是一个坏主意?


阅读 438

收藏
2020-05-19

共1个答案

一尘不染

我们考虑过添加一个新的操作“?”。具有所需语义的语言。(现在已添加;请参见下文。)也就是说,您会说

cake?.frosting?.berries?.loader

编译器将为您生成所有短路检查。

它并没有成为C#4的标准。也许是该语言的一个假设的未来版本。

更新(2014年):
?.操作员现已计划用于下一个Roslyn编译器版本。请注意,关于运算符的确切语法和语义分析仍存在一些争论。

更新(2015年7月): Visual Studio
2015已发布,并附带支持空条件运算符?.?[]的C#编译器。

2020-05-19