この関数を考えてみましょう。これは真理値表と考えることができます。
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
コンパイラはその最後の節を主張します。しかし、真理値表の観点からは、それは不可能な状態です。
はい、それは機能します、そしてはい、私はそれと一緒に暮らすことができます。しかし、この種のコードを回避するためのメカニズムがc#にあるのか、それとも明らかな何かを見逃しているのか疑問に思っています。
更新:
ボーナスポイントについて、そして純粋に好奇心から、この種のことを異なる方法で扱う言語はありますか?多分それは言語の問題ではなく、むしろスマートコンパイラの1つです(しかし、エッジケースは想像を絶するほど複雑になると思います)。