In C# ist der default-Fall notwendig, auf ein switch auf einem enum?
Ich habe gesehen, Beiträge im Zusammenhang mit C++, bin aber zu Fragen, speziell für C# .NET (4.0+).
Im folgenden Beispiel ist ein default-Fall notwendig?
public enum MyEnum : int
{
First,
Second
}
public class MyClass
{
public void MyMethod(MyEnum myEnum)
{
switch (myEnum)
{
case MyEnum.First: /* ... */ break;
case MyEnum.Second: /* ... */ break;
default: /* IS THIS NECESSARY??? */ break;
}
}
}
- Möglich, Duplikat der Sollte switch-Anweisungen enthalten immer eine default-Klausel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein verbreiteter Irrtum, dass .Net enum-Werte sind beschränkt auf diejenigen, die erklärt werden in der Enum. In Wirklichkeit aber können Sie einen beliebigen Wert in dem Bereich von der Basis-Typ der enum (
int
standardmäßig). Zum Beispiel ist das hier völlig legalDieser code wird kompiliert ohne warnings und trifft keine Ihrer
case
labels.Nun, ob Ihr code wählt, behandeln diese Art von Szenario ist eine politische Entscheidung. Es ist nicht notwendig aber ich würde sicherlich empfehlen mit einer. Stell ich lieber ein
default
zu jedemswitch
auf enum Schreibe ich speziell für dieses Szenario mit dem folgenden MusterEs ist nicht unbedingt notwendig, aber kann jemand übergeben Sie einen Wert, der nicht bedeckt durch Ihre enum (seit Aufzählungen eigentlich nicht beschränken Sie den Bereich der zulässigen parameter-Werte).
Ich in der Regel fügen Sie eine Standard-und
throw
wenn der angegebene Wert ist unerwartet.Ist es technisch nicht notwendig, aber da kann man leicht gegossen Wert
MyEnum
s zugrunde liegenden Typ (in der Regel int) zu einer Instanz vonMyEnum
. Daher ist es gute Praxis, fügen Sie eine default-Anweisung mit einerDebug.Assert()
im es.Es ist nicht erforderlich, aber gute übung, wie jemand könnte die Einführung einer neuen Aufzählung später auf. Zum Beispiel eine Ausnahme, die zeigt, dass die "unbekannt" - Aufzählung ist nicht behandelt.
Nein, der default-Fall nicht benötigt.
Rein vom code-Perspektive, es gibt keine Voraussetzung, um eine
default
Fall. Es ist ausschließlich eine Frage Ihrer logischen Anforderungen.Seine benötigt, wenn Sie die Umwandlung in enum undefinierten Wert (nicht eine Ausnahme werfen), auch wenn Sie mehr Werte in enum.