如何在嵌套引用中检查null

Ere*_*mez 7 c# nullreferenceexception c#-4.0

寻找一些最佳实践指导.假设我有一行代码如下:

Color color = someOrder.Customer.LastOrder.Product.Color;
Run Code Online (Sandbox Code Playgroud)

Customer,LastOrder,Product和Color可以null在正常条件下.但是,如果路径中的任何一个对象为null,我希望color为null; 为了避免空引用异常,我需要检查每个对象的空条件,例如

Color color = someOrder == null ||
              someOrder.Customer == null || 
              someOrder.Customer.LastOrder == null ||
              someOrder.Customer.Product == null ? 
              null : someOrder.Customer.LastOrder.Product.Color;
Run Code Online (Sandbox Code Playgroud)

或者我可以这样做

Color color = null;
try {color = someOrder.Customer.LastOrder.Product.Color}
catch (NullReferenceException) {}
Run Code Online (Sandbox Code Playgroud)

第一种方法显然有效,但编码和更难阅读似乎更乏味.第二种方法稍微容易一点,但对此使用异常处理可能不是一个好主意.

是否有另一种检查空值的快捷方式,并在必要时将null指定为颜色?或者在使用这种嵌套引用时如何避免NullReferenceExceptions的任何想法?

Mar*_*ers 11

您正在寻找null-safe解除引用运算符.

Color color = someOrder?.Customer?.LastOrder?.Product?.Color;
Run Code Online (Sandbox Code Playgroud)

不幸的是C#不支持它.也许它会在稍后添加,但目前没有计划这样做.

有关

  • 2014年更新,C#6现在支持它. (6认同)