OR运算符的序列

joh*_* Gu 3 c# asp.net-mvc-3

我有以下OR运算符,现在当前如果c为null,将返回Error视图,并且在第二次检查时不会引发空异常(!c.ManagedBy ...); 但这只会在编译器在(!c.Ismanaged ..)检查之前执行(c == null)检查时发生.

Book c = elearningrepository.GetBook(id);

if ((c == null) || (!c.IsManagedBy(User.Identity.Name)))
{
    return View("Error");
}
Run Code Online (Sandbox Code Playgroud)

所以我可以保证编译器将始终首先执行c == null检查,或者最好将上面的检查分成两个单独的If语句来显式强制执行序列.BR

Yuc*_*uck 5

||会发生短路,并会按照您的描述进行精确评估.没有必要将这些陈述分开.

来自MSDN:

条件OR运算符(||)执行其bool操作数的逻辑或.如果第一个操作数的计算结果为true,则不计算第二个操作数.如果第一个操作数的计算结果为false,则第二个操作符将确定整个OR表达式的计算结果为true或false.

编辑最新的MSDN文章(2010年).