Логическое «или» с правым троичным выражением не приводит к короткому замыканиюC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Логическое «или» с правым троичным выражением не приводит к короткому замыканию

Сообщение Anonymous »

В общем, короткое поведение логического оператора «или» || игнорирует правую часть выражения, если левая часть имеет значение true. Очевидно, использование троичного выражения в качестве правого выражения является исключением из этого правила:

Код: Выделить всё

List foo = null;
bool bar = false;

if (foo == null || bar != true ? foo.Count == 0 : true)
{
// ...Conditional code...
}
Этот код генерирует исключение NullReferenceException для foo.Count, поскольку foo имеет значение null. И естественно, булева логика это позволяет. Но если foo имеет значение null, можно было бы ожидать, что оператор "или" приведет к короткому замыканию и даже не вычислит правую часть выражения, но это все равно происходит, и поэтому выдается исключение.
Это ошибка в моем коде или в компиляторе C#? Есть ли часть спецификации C#, которая обрабатывает этот случай?

Подробнее здесь: https://stackoverflow.com/questions/133 ... rt-circuit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»