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