Подтвердить что ты не робот

Можно ли проверить объект на null и в том же if-statement сравнить значение свойства объекта?

Смотрите заголовок темы. Могу ли я безопасно сделать что-то подобное, не беспокоясь о NullReferenceException, или не гарантируется, что эти булевы выражения будут оцениваться слева направо?

// can this throw an NRE?
if (obj == null || obj.property == value)
{
   // do something
}
4b9b3361

Ответ 1

Они будут оцениваться слева направо, гарантировано. Так что да, это безопасно.

Оператор условного OR (||) выполняет логическое ИЛИ своего bool операндов, но оценивает только его второй операнд, если необходимо.

http://msdn.microsoft.com/en-us/library/6373h346%28VS.71%29.aspx

Ответ 2

Это совершенно безопасно. Если первое выражение слева истинно, то остальное не оценивается.

Ответ 3

Это действительно безопасно. См. Документацию на С# для || и && (что, конечно, наоборот, короткое замыкание для ложного).

(Что касается "x || y" )

если x истинно, y не оценивается (потому что результат ИЛИ операция верна независимо от того, что значение y может быть). Это называется оценка "короткого замыкания".