2017-10-26 1 views
2

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?

+0

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

+1

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.) –

+1

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. –

Antwort

2

Es gibt keinen praktischen Unterschied. Beide Formate werden das gleiche wie verhalten:

if(value==1) 
    return "a"; 
else if(value==2) 
    return "b"; 
else 
    return "c"; 

Der erste Ansatz, der Verwendung von default, wird dringend empfohlen. Es ist derjenige, der Stilrichtlinien folgen wird, und das wird die Absicht des Codes am deutlichsten machen.

-1

Die meisten Stilrichtlinien sagen, dass man eine "Standard" -Anweisung verwenden sollte.

+0

Siehe auch https: // stackoverflow.com/questions/3110088/switch-statement-muss-default-sein-der-letzte-fall – JosephDoggie

+0

Nicht sicher * warum * downvoted (Stand vom 26.10.2017), die Aussage ist sicherlich wahr .... – JosephDoggie

+2

[Do nicht upvote nur, um die Post von einer unverdienten negativen Abstimmung zu befreien.] (https://meta.stackexchange.com/questions/104829/is-it-reasonable-to-upvote-in-order-to-counter-what-i -think-is-an-ungerechtfertigt-do/104832 # 104832): P @AlmightyR –

Verwandte Themen