根据我的理解和阅读,您可以在if语句(&&或||)中使用短路,以便不触发第二个条件。如果你想要同时解决两个条件你会使用单个操作数(&或|)。
所以说如果我有内联if语句如下:
var test = (MyObject != null || string.IsNullOrEmpty(MyObject.Property)) ? string.Empty : MyObject.Property;
如果MyObject为null,这将抛出object reference
错误,我认为这不应该因为我使用短路。有人可以解释一下。
答案 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)
这是因为MyObject
是null
,因此第一个条件是false
,因此必须评估第二部分以了解整个条件。将行更改为:
MyObject != null && string.IsNullOrEmpty(MyObject.Property)
答案 5 :(得分:1)
您应该更喜欢可读性而不是行数,例如:
string prop = string.Empty;
if(MyObject != null && MyObject.Property != null)
prop = MyObject.Property;
(您的例外原因已经在其他答案中解释过了)