注意:这个问题是在引入the .?
operator in C# 6 / Visual Studio 2015之前提出的.
我们都去过那里,我们有一些像 cake.frosting.berries.loader 这样的深层属性,我们需要检查它是否为空,所以没有异常(exception)。方法是使用短路 if 语句
if (cake != null && cake.frosting != null && cake.frosting.berries != null) ...
这并不十分优雅,也许应该有一种更简单的方法来检查整个链并查看它是否遇到空变量/属性。
是否可以使用某种扩展方法,或者它是一种语言功能,还是一个坏主意?
最佳答案
我们已经考虑添加一个新的操作“?”。到具有您想要的语义的语言。 (现在已经添加了;见下文。)也就是说,你会说
cake?.frosting?.berries?.loader
编译器会为您生成所有短路检查。
它并没有成为 C# 4 的阈值。也许对于该语言的一个假设的 future 版本。
更新(2014 年):
?.
运算符现在是 planned用于下一个 Roslyn 编译器版本。请注意,对于运算符的确切句法和语义分析仍然存在一些争论。
更新(2015 年 7 月):Visual Studio 2015 已发布并附带支持 null-conditional operators ?.
and ?[]
的 C# 编译器.
关于c# - 深度空检查,有没有更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080647/