2010-12-03 8 views
10

Wie würde C# dies kompilieren?Wird C# unterstützt, wenn Codeblocks ohne Klammern?

 if (info == 8) 
      info = 4; 
     otherStuff(); 

Wäre es die folgenden Zeilen in dem Codeblock enthalten?

 if (info == 8) 
     { 
      info = 4; 
      otherStuff(); 
     } 

Oder würde es nur die nächste Zeile nehmen?

 if (info == 8) 
     { 
      info = 4; 
     } 
     otherStuff(); 

Antwort

29

Ja, es unterstützt sie - aber es nimmt die nächste Aussage, nicht die nächste Zeile. So zum Beispiel:

int a = 0; 
int b = 0; 
if (someCondition) a = 1; b = 1; 
int c = 2; 

gleichwertig ist:

int a = 0; 
int b = 0; 
if (someCondition) 
{ 
    a = 1; 
} 
b = 1; 
int c = 2; 

persönlich schließe ich immer Klammern um die Körper der if Aussagen und die meisten Kodierungskonventionen Ich habe über nehmen den gleichen Ansatz kommen.

+6

beste Antwort: enthält sowohl Erklärung, Code-Snippet und Gotchas! – mlibby

+1

+1 für Codierungsstandards! –

3

Es funktioniert wie C/C++ und Java. Ohne Curlies enthält es nur die nächste Aussage.

+0

Würden Sie glauben, dass mit geschweiften Klammern, es auch nur die nächste Anweisung ausgeführt wird? –

5
if (info == 8) 
{ 
    info = 4; 
} 
otherStuff(); 
0

Natürlich funktioniert "wenn" nur für "info = 4".

0

Es dauert nur die nächste Zeile, also würde Ihr Beispiel auf das zweite mögliche Ergebnisbeispiel kompilieren.

1

Ja, unterstützt es, wenn Codeblocks ohne Klammern, nur die erste Anweisung nach dem, wenn in dem if-Block enthalten sein, wie in Ihrem zweiten Beispiel

0

In C#, wenn Anweisungen Befehle basierend auf Klammern ausführen. Wenn keine Klammern angegeben sind, wird der nächste Befehl ausgeführt, wenn die Anweisung wahr ist. Anschließend wird der Befehl ausgeführt. wenn die Bedingung falsch ist, fährt nur auf den nächsten Befehl

daher

if(true) 
    method1(); 
method2(); 

wäre das gleiche wie

if(true) 
{ 
    method1(); 
} 
method2(); 
Verwandte Themen