Ich arbeite mit älteren C# -Code, und sehe zwei Arten von switch
Aussagen. Ich komme aus einem Python Hintergrund, so dass die Nuancen der Unterschied zwischen diesen beiden switch
Verwendungen entzieht sich mirzwei Arten von C# Switch-Return-Anweisungen, was ist der Unterschied?
Beispiel # 1
public string SwitchExample1(int value)
{
switch(value)
{
case 1: return "a";
case 2: return "b";
default: return "c";
}
}
Beispiel # 2
public string SwitchExample2(int value)
{
switch(value)
{
case 1: return "a";
case 2: return "b";
}
return "c";
}
Funktionell sind sie gleich - beide geben "c" zurück, wenn die value != 1 && value != 2
Ist das einfach ein Stil Unterschied? Oder gibt es Best Practices, die vorschreiben, dass Sie eine über die andere verwenden?
Es ist ein Programmierstilproblem. Gute Programmierpraktiken erforderten eine Methode, um von der letzten Anweisung des Codes zurückzukehren. Der erste Fall folgt nicht den guten Programmierpraktiken. – jdweng
Statische Code-Analysatoren würden normalerweise warnen, im zweiten Fall, dass Sie vergessen haben, einen 'default'-Fall hinzuzufügen (wo Sie zumindest etwas wie' throw NotSupportedException() 'machen könnten). Das allein könnte ein ausreichender Grund sein, um es Teil der Aussage zu machen, so wie es logisch ist. (Dies ist sinnvoller, wenn man bedenkt, dass der typische Anwendungsfall für Aufzählungen ist, bei denen die Liste der Werte * offensichtlich * nicht offen ist, aber in der tatsächlichen * Praxis * liegt, da die Werte nicht auf die definierten Tags beschränkt sind, es ist also ein häufiger Fehler, die ungültigen Werte zu überprüfen.) –
Je nach Szenario würde ich es auch bevorzugen, wenn 'default' eine Ausnahme auslöst. Andernfalls wird Ihr 'default' zukünftige Werte stillschweigend akzeptieren, die nicht erwartet wurden, als der' switch' geschrieben wurde. Wie sicher kann ich sein, dass der Handler, den ich heute schreibe, für zukünftigen Wert korrekt ist, den ich nicht erwartet habe? Eine Ausnahme zu werfen, zwingt mich, mich damit zu befassen. –