内联If语句 - 短路

时间:2013-03-01 11:57:58

标签: c# if-statement inline short-circuiting

根据我的理解和阅读,您可以在if语句(&&或||)中使用短路,以便不触发第二个条件。如果你想要同时解决两个条件你会使用单个操作数(&或|)。

所以说如果我有内联if语句如下:

var test = (MyObject != null || string.IsNullOrEmpty(MyObject.Property)) ? string.Empty : MyObject.Property;

如果MyObject为null,这将抛出object reference错误,我认为这不应该因为我使用短路。有人可以解释一下。

6 个答案:

答案 0 :(得分:13)

你使用的是错误的条件。这部分:

MyObject != null || string.IsNullOrEmpty(MyObject.Property)

应该是:

MyObject == null || string.IsNullOrEmpty(MyObject.Property)

如果左手是 false ||的RHS才会执行。您希望它仅在MyObject 为空时才执行。

编辑:如果你真的想要MyObject != null部分,你可以将整个事情改为:

var test = MyObject != null && !string.IsNullOrEmpty(MyObject.Property)
       ? MyObject.Property : "";

请注意条件运算符的第2和第3个操作数的反转。

答案 1 :(得分:3)

你应该有一个==不是!=

var test = (MyObject == null || string.IsNullOrEmpty(MyObject.Property) ? string.Empty : MyObject.Property

答案 2 :(得分:2)

试试这个:

var test = (MyObject == null || string.IsNullOrEmpty(MyObject.Property)
             ? string.Empty : MyObject.Property

答案 3 :(得分:2)

MyObject != null || string.IsNullOrEmpty(MyObject.Property) 

在这里你说。

如果我的对象不为null。 要么 string.IsNullOrEmpty(MyObject.Property)

这意味着如果MyObject为null,他将尝试执行第二部分。

MyObject == null || string.IsNullOrEmpty(MyObject.Property)

这不会抛出null异常

答案 4 :(得分:2)

这是因为MyObjectnull,因此第一个条件是false,因此必须评估第二部分以了解整个条件。将行更改为:

MyObject != null && string.IsNullOrEmpty(MyObject.Property)

答案 5 :(得分:1)

您应该更喜欢可读性而不是行数,例如:

string prop = string.Empty;
if(MyObject != null && MyObject.Property != null)
    prop = MyObject.Property;

(您的例外原因已经在其他答案中解释过了)