2017-11-29 2 views
1

I wurde mit der switch-Anweisung in C# und ich erkennen, obwohl die Variable in der switch-Anweisung übergab eine Enumeration ist, die switch-Anweisung keinen Fehler für Fall wirft 0, aber einen Fehler für nicht werfen Fall 1,2,3 ... Ich fragte mich, warum es so ist. Ich weiß, wie man enums mit dem Schalterfall verwendet, und ich brauche Hilfe damit nicht, ich will wissen, warum es keinen Fehler mit 0 wirft. Weil 0 eine ganze Zahl ist.Fall 0 in Switch-Anweisung

Hier ist der Code, und das kompiliert ohne Fehler. MathOperator ist ein Enum.

public double Test5(double num1, double num2, MathOperator op) 
    { 
     double answer=0; 
     switch (op) 
     { 

      case 0: 
       { 
        break; 
       } 

     } 
     return answer; 
    } 

Vielen Dank für die Beantwortung meiner Frage!

+1

statt 0,1,2,3 verwenden, ..., versuchen Sie die Enum-Namen in Ihrem Fall – lamandy

+1

Sie den Fehler enthalten sollten verwenden und die Erklärung von 'MathOperator' da sie beide eindeutig relevant sind. Und was @lamandy sagte :) – zzxyz

Antwort

0

Versuchen Sie dies. Sie benötigen einen Standardfall alle anderen MathOperator zu behandeln, die in die Methode übergeben wird Test5, die derzeit nicht in Ihrer switch Aussage ist, was ich denke, das Problem in Ihrem Fall ist. Eine Faustregel wäre, einen Switch-Fall zu haben, der gegen alle in Ihrem enum aufgeführten enum Mitglieder überprüft.

public double Test5(double num1, double num2, MathOperator op) 
{ 
    double answer=0; 
    switch (op) 
    { 
     // Use it like this. 
     case MathOperator.YourOperator: 
     { 
      break; 
     } 
     case MathOperator.Multiply: 
     { 
      break; 
     } 
     default: 
     { 
      // Other cases 
     } 
    } 
    return answer; 
} 
+0

nicht wirklich die Frage zu beantworten, warum '0' ist erlaubt, aber die andere sind es nicht. Ich kann nicht den Teil der Spezifikation finden, der das im Moment erklärt, aber "0" ist ein Sonderfall. –

+0

@KirkWoll Danke, dass du das herausgebracht hast, aktualisiert. – IvanJazz

2

Es ist eine Regel, in den C# Spezifikation Kapitel 13 "Conversions":

13.1.3 Implicit Enumeration Konvertierungen
Eine implizite Enumeration Umwandlungs 0 die dezimale ganzzahlige-Literal ermöglicht umgewandelt werden zu jedem Enum-Typ.

Also 0 ist hier in einer Weise speziell, dass kein anderes Integer-Literal ist.