Рассмотрим эту функцию, которую вы можете рассматривать как таблицу истинности:
public Foo doSomething(bool a, bool b) {
if ( a && b) return doAB();
else if ( a && !b) return doA();
else if (!a && b) return doB();
else if (!a && !b) return doNotANotB();
else throw new Exception("Well done, you defeated boolean logic!");
}
Компилятор настаивает на этом последнем предложении else
. Но с точки зрения таблицы правды это невозможно.
Да, это работает, и да, я могу жить с ним. Но мне интересно, есть ли какой-то механизм в С#, чтобы избежать такого рода кода, или если я пропустил что-то очевидное?
UPDATE:
Для бонусных очков и чисто из любопытства существуют ли какие-либо языки, которые занимаются подобным делом по-разному? Может быть, это не язык, а скорее один из умного компилятора (но случаи с краем были бы невообразимо сложными, я полагаю).