2012-04-01 15 views
-4

Nun, ich habe diese wenn else Aussage, wo ich 12 Variablen habe, die entweder 0, 1 oder 2 sein können, wenn es ein 0 ist, wenn es 1 fehlschlägt, wenn es a 2 ist unbekannt. Ich habe mich gefragt, ob jemand einen kürzeren Weg des Schreibens es in C#Allgemeine Programmierung über IF sonst if Anweisungen C#

hier weiß, ist, was ich schreiben müssen, wenn es nicht

ist
string pass = "pass"; 
string fail = "fail"; 
string unknown = "unknown" 
if (value == 0) 
{ 
    test1 = pass; 
} 
else if (value == 1) 
{ 
    test1 = fail; 
} 
else if (value == 2) 
{ 
    test1 = unknown; 
} 
if (value1 == 0) 
{ 
    test2 = pass; 
} 
else if (value1 == 1) 
{ 
    test2 = fail; 
} 
else if (value1 == 2) 
{ 
    test2 = unknown; 
} 
. 
. 
. 

if (value12 == 0) 
{ 
    test13 = pass; 
} 

Lassen Sie mich ein wenig mehr erklären. Ich habe 12 Bilder auf der Webseite, die aktualisiert werden müssen, abhängig von einer Datenbank für die Werte. Jedes Bild kann nur eine von drei Optionen sein und kann sich je nach Datenbank ändern. Ein Pass (Häkchen), ein Fehler (ein rotes X) und ein Unbekanntes (Fragezeichen). Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

+0

Was sind die "Regeln"? Wenn value12 übergeht, wird 'pass' zurückgegeben, egal ob alle anderen fehlschlagen. Ist das korrekt? –

+1

In diesem Code beeinflussen 'value' und' value {1..11} 'den endgültigen Wert von' test' nicht, so dass sie ignoriert werden können. Ist das ein Tippfehler? – delnan

+0

Dieser Code macht keinen Sinn, wie Delnan sagt, Sie könnten drei Viertel davon entfernen und nichts ändern. – McGarnagle

Antwort

0

Gemäß Ihrem Code müssen die Werte 0-11 nicht überprüft werden, da die Testvariable mit value12 erneut geändert wird. Sie können also einfach den letzten Wert überprüfen und alle anderen überspringen.

+0

Nach der Frage: 'Das kann entweder 0 1 oder 2' sein. Es gibt kein Wort über -1. – MarcinJuraszek

0

Ich würde eine for-Schleife schreiben, die jede Variable überprüft. Oder schreiben Sie den Check als eine Funktion, auf die mit jeder Variable verwiesen werden kann. Tun Sie das erstere, wenn die Variablen in Reihe sind und ihre Namen sequentiell bestimmt werden können. Tun Sie das später, wenn die Variablennamen nicht wirklich miteinander verwandt sind.

Falls erforderlich, platzieren Sie die Variablen in ein Array, das durchgeschleift werden kann.

6

Nun, ich habe diese, wenn else-Anweisung, wo ich 12 Variablen, die entweder sein können 0 1 oder 2.

Jedes Mal, wenn Sie haben mehrere Variablen, die Sie zu behandeln in der Lage sein wollen In ähnlicher Weise sollten Sie eine Sammlung für sie verwenden, z ein Array oder ein List<T>. Wenn Sie nicht bereits für sie eine Sammlung haben, können Sie eine erstellen:

int[] values = { value0, value, value2 /* etc * }; 

... obwohl es besser wäre, wenn man sich als eine Sammlung von Anfang an haben könnte.

Dann können Sie über alle von ihnen iterieren. Es ist nicht wirklich klar, warum Sie in diesem Fall den Wert test in jedem Block überschreiben, aber eine Sammlung von Eingaben zu haben, führt zu einer natürlichen Art, eine Sammlung von Ausgaben zu erstellen. Sie können auch eine switch-Anweisung oder einen bedingten Ausdruck verwenden, um die Überprüfung zu vereinfachen. Zum Beispiel:

public static string ConvertValueToLabel(int value) 
{ 
    switch (value) 
    { 
     case 0: return "pass"; 
     case 1: return "fail"; 
     case 2: return "unknown"; 
     // Adjust this behaviour as appropriate... 
     default: throw new ArgumentOutOfRangeException("value"); 
    } 
} 

Oder:

public static string ConvertValueToLabel(int value) 
{ 
    // Note that this doesn't do the same range checking as the version above 
    return value == 0 ? "pass" 
     : value == 1 ? "fail" 
     : "unknown";    
} 

(Einige Leute mögen nicht conditionals wie diese „Stapel“, und ich würde wahrscheinlich nicht in diesen Fall verwenden, bei denen eine switch-Anweisung ist wahrscheinlich vernünftiger, aber es kann wirklich handlich sein.)

1

Sieht aus wie ein Fall für Arrays.

 int[] values = { 1, 1, 2, 2, 1, 2 }; 
     for (int i = 0; i < values.Length; i++) 
     { 
      if (values[i] == 1) 
      { 
      } 
      else if (values[i] == 2) 
      { 
      } 
     }//for