Действительно ли безопасно проверить, что объект для пустого указателя и в том же операторе "if" сравнивает значение свойства объекта?

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

// can this throw an NRE?
if (obj == null || obj.property == value)
{
   // do something
}
12
задан Abel 11 August 2010 в 23:16
поделиться

3 ответа

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

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

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

22
ответ дан 2 December 2019 в 06:25
поделиться

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

(Относительно «x || y»)

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

1
ответ дан 2 December 2019 в 06:25
поделиться

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

1
ответ дан 2 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: