Ich nehme an der einfachste Weg, durch ein konstruiertes Beispiel zu erklären ist:Wie handhaben „nicht alle Codepfade einen Wert zurückgeben“, wenn die Logik der Funktion eine Rückkehr nicht gewährleistet
public static int Fail() {
var b = true;
if (b) {
return 0;
}
}
Dieser Code wird nicht kompiliert und gibt den Fehler "nicht alle Codepfade geben einen Wert zurück", während wir Menschen klar sehen können, dass dies der Fall ist. Ich verstehe warum. Meine Frage ist, was getan werden sollte, um die Situation zu verbessern. Es könnte so etwas sein:
public static int Fail() {
var b = true;
if (b) {
return 0;
}
throw new ApplicationException("This code is unreachable... but here we are.");
}
Aber alles scheint nur ziemlich albern. Gibt es einen besseren Weg? Auch dieser Code ist ein künstliches Beispiel (und kann auf return 0
reduziert werden). Mein tatsächlicher Code ist massiv und komplex, liefert aber logischerweise (durch mathematischen Beweis) einen Wert, bevor er versucht, zu beenden.
Beachten Sie, dass, wenn Sie b als eine 'const' lokale Variable deklarieren ('const bool b = true;'), kompiliert es einfach –
Wenn Ihre Methode so "massiv und komplex" ist, sollten Sie sie wahrscheinlich umgestalten. Welche Hoffnung hätte der nächste menschliche Programmierer, wenn ein Compiler aufgibt? – lesscode
https://github.com/coder0xff/parlex/blob/master/IDE/Nfa.cs basiert auf dem Kameda-Weiner-Algorithmus in "Über die Zustandsminimierung von nichtdeterministischen endlichen Automaten". Dieses Zeug ist nicht für menschliche Programmierer. – Brent