Этот пример, аналогичный вашему, не должен приводить к ошибке компиляции, поскольку он предназначен для условного выполнения логики.
if ( DoSomething() || SolveEquation() ) ; // Intentional - compiles and runs as expected.
Если ключевое слово if
будет удалено, вы получите ошибку компиляции.
DoSomething() || SolveEquation(); // Compile ERROR.
Логика короткого замыкания C # определяет: если DoSomething () возвращает true
, то SolveEquation () не оценивается; в противном случае это оценивается.
Мы предположим, что обе функции каким-то образом изменяют состояние работающей программы, поэтому важно, какая из них выполняется - потому что это определит конкретный тип состояния программы. Конечно, лучший способ написать это было бы ...
if ( ! DoSomething() )
SolveEquation();
или (Спасибо Алекс за это из комментариев)
bool result = DoSomething() || SolveEquation();
.. а зачем грабить пользователя первым способом?
Потому что первый способ можно утверждать, что он плохой, но это доказывает, что вы не обязательно хотите, чтобы ситуация приводила к ошибке компиляции.
Это мой аргумент, что он не должен приводить к ошибке компиляции . Существующее предупреждение хорошо на тот случай, если разработчик допустил общую ошибку.