В общем, короткое поведение логического оператора «или» || игнорирует правую часть выражения, если левая часть имеет значение 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