Switch-Anweisung ohne Standardeinstellung beim Umgang mit Aufzählungen

Dies war ein kleiner Ärger von mir, seit ich mit .NET angefangen habe, aber ich war neugierig, falls ich etwas verpasst habe. Mein Code-Snippet lässt sich nicht kompilieren (bitte verzeihen Sie die erzwungene Natur des Beispiels), da (laut Compiler) eine return-Anweisung fehlt:

public enum Decision { Yes, No}

    public class Test
    {
        public string GetDecision(Decision decision)
        {
            switch (decision)
            {
                case Decision.Yes:
                    return "Yes, that's my decision";
                case Decision.No:
                    return "No, that's my decision";

            }
        }
    }

Jetzt weiß ich, dass ich einfach eine Standardanweisung platzieren kann, um die Konformitätswarnung zu entfernen, aber meiner Meinung nach ist nicht nur dieser redundante Code, sondern auch sein gefährlicher Code. Wenn die Aufzählung in einer anderen Datei war und ein anderer Entwickler mitkommt und hinzufügtKönnte sein meiner Aufzählung nach würde es von meiner Standardklausel behandelt, von der nichts bekannt istKönnte seins und es ist sehr wahrscheinlich, dass wir einen logischen Fehler einführen.

Wenn der Compiler mich den obigen Code verwenden lässt, kann dies zu einem Problem führen, da meine case-Anweisung nicht mehr alle Werte aus meiner Aufzählung abdeckt. Klar, das klingt für mich viel sicherer.

Das ist so grundlegend falsch für mich, dass ich wissen möchte, ob es nur etwas ist, das mir fehlt, oder müssen wir nur sehr vorsichtig sein, wenn wir Aufzählungen in switch-Anweisungen verwenden?

BEARBEITEN: Ich weiß, dass ich im Standard Ausnahmen auslösen oder eine Rückgabe außerhalb des Schalters hinzufügen kann, aber dies sind immer noch grundlegende Hacks, um einen Compilerfehler zu umgehen, der kein Fehler sein sollte.

Wenn man bedenkt, dass eine Aufzählung wirklich nur ein Int ist, ist das eines der schmutzigen kleinen Geheimnisse von .NET, was wirklich peinlich ist. Lassen Sie mich bitte eine Aufzählung mit einer endlichen Anzahl von Möglichkeiten deklarieren und eine Zusammenstellung geben für:

Decision fred = (Decision)123;

und dann eine Ausnahme auslösen, wenn jemand Folgendes versucht:

int foo = 123;
Decision fred = (Decision)foo;

EDIT 2:

Einige Leute haben Kommentare dazu abgegeben, was passiert, wenn sich die Aufzählung in einer anderen Assembly befindet und wie dies zu Problemen führen würde. Mein Punkt ist, dass dies das Verhalten ist, von dem ich denke, dass es passieren sollte. Wenn ich eine Methodensignatur ändere, führt dies zu Problemen. Ich gehe davon aus, dass die Änderung einer Aufzählung dieselbe sein sollte. Ich habe den Eindruck, dass viele Leute meinen, ich verstehe nichts von Aufzählungen in .NET. Ich denke nur, dass das Verhalten falsch ist, und ich hatte gehofft, dass jemand etwas über ein sehr undurchsichtiges Feature gewusst hätte, das meine Meinung zu .NET-Aufzählungen geändert hätte.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage