在if语句中检查null的层次结构

时间:2014-02-19 10:28:35

标签: c# .net

在像OperationContext之类的复杂对象中编写此类代码是安全的:

if(OperationContext.Current!=null && 
   OperationContext.Current.ServiceSecurityContext !=null && 
   OperationContext.Current.ServiceSecurityContext.WindowsIdentity !=null)

或者我是否需要将代码分成三个if语句?

我的问题是如果OperationContext.Current为空,我担心OperationContext.Current.ServiceSecurityContext会抛出NullReferenceException

3 个答案:

答案 0 :(得分:4)

C#中的&&运算符使用short circuit evalulation,因此您的代码很好。

这意味着首先评估条件的左侧,然后评估它是否通过右侧。

答案 1 :(得分:3)

很安全。 &&的右侧仅在左侧为true的情况下进行评估。

以下是MSDN explanation

  

操作

x && y
     

对应于操作

x & y
     

除了如果x为假,则不评估y,因为结果为   无论y的值是什么,AND操作都是假的。这是   被称为“短路”评估。

答案 2 :(得分:1)

不会,请看一下&& 运算符的定义:http://msdn.microsoft.com/en-us/library/2a723cdk.aspx。如果第一部分为假,则不会评估第二部分。

如果使用& 运算符,您的代码将抛出该异常。