См. заголовок потока. Я могу безопасно сделать что-то как этот, не волнуясь о a NullReferenceException
, или не гарантируется это, те булевы выражения будут оценены слева направо?
// can this throw an NRE?
if (obj == null || obj.property == value)
{
// do something
}
Они будут оцениваться слева направо, гарантированно. Так что да, это безопасно.
Оператор условного ИЛИ (||) выполняет логическое ИЛИ своего bool операнды, но оценивает только его второй операнд, если необходимо.
http://msdn.microsoft.com/en-us/library/6373h346%28VS.71%29.aspx
Это действительно безопасно. См. Документацию C # для || и && (что, конечно, наоборот, короткое замыкание для false).
(Относительно «x || y»)
если x истинно, y не вычисляется (потому что результат ИЛИ операция верна независимо от того, что значение y может быть). Это известно как оценка "короткого замыкания".
Это совершенно безопасно. Если первое выражение слева истинно, то остальные не оцениваются.