c# - 深度空检查,有没有更好的方法?

标签 c# null

注意:这个问题是在引入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/

相关文章:

c# - 从azure openai sdk api返回流的正确方法

c# - 如何将字节转换为字符,例如1 -> '1' ?

typescript - 递归应用复杂的泛型类型

仅检查空值的 Javascript 最佳实践

java - 与 Guava 的Optional<T> 一起,Mandatory<T> 会是一个有用的补充吗?

C# 到 Java : Base64String, MemoryStream、GZipStream

c# - ComboBox - 从两个属性中选择对象

c# - 如何允许用户作为页面登录,然后使用 C# Facebook SDK 作为该页面发布?

objective-c - NULL 和 nil 等价吗?

c++ - 何时使用 Q_NULLPTR?