web-dev-qa-db-fra.com

Sinon, si des instructions existent en C #?

J'ai rencontré le code suivant en C #.

if(condition0) statement0;
else if(condition1) statement1;
else if(condition2) statement2;
else if(condition3) statement3;
...
else if(conditionN) statementN;
else lastStatement;

Certains de mes collègues me disent qu'il s'agit d'une déclaration else if. Cependant, je suis convaincu qu'il s'agit en fait d'une instruction imbriquée multicouche if-else. Je sais que sans délimiteurs {}, Une instruction est autorisée dans un if ou else. Donc, dans ce cas, je pense que ce serait équivalent au code suivant.

if(condition0) 
  statement0;
else
  if(condition1)
    statement1;
  else
    if(condition2)
      statement2;
    else
      if(condition3)
        statement3;
      else
      ...

Notez que tout ce que j'ai changé, c'est l'espace. Cette indentation fonctionne car chaque else revient à la dernière instruction if lorsqu'il n'y a pas de délimiteurs.

Quelqu'un peut-il préciser si le format else if Dans le premier exemple est traité différemment par le compilateur que le format imbriqué if-else Dans le deuxième exemple?

48
Aviv B.

Vous avez raison; il n'y a rien de tel qu'une instruction "else if" en C #. C'est juste un autre où l'instruction de la clause alternative est elle-même une instruction if.

Bien sûr, le IDE traite "else if" comme spécial afin que vous obteniez le formatage de Nice que vous attendez.

Notez qu'il y a is an #Elif construction dans la syntaxe "préprocesseur".

Notez également que C, C++ et ECMAScript - et je suis sûr que beaucoup d'autres langages de type C - ont également la propriété qu'il n'y a pas de déclaration formelle "else if". Au contraire, dans chacun, le comportement sort de la définition de "else" comme devant une seule déclaration.

77
Eric Lippert

C'est un if-else à plusieurs niveaux.

La raison en est liée aux règles de syntaxe c #. Un else est suivi d'une instruction, et toute chaîne if est considérée comme une instruction.

4
Robert Harvey

La construction else if n'est jamais mentionné dans la spécification C # , sauf dans certains exemples où il est utilisé sans explication. Je ne pense donc pas que ce soit une construction spéciale, elle est juste imbriquée si des instructions.

4
Mark Byers

Vous avez raison. C'est juste un else suivi d'un if.

3
James Curran

Il n'y a aucune instruction "else if" en C #.

Pour cette question, je ne sais pas qu'il existe tout mots-clés d'instruction multi-Word en C #.

2
John Saunders

Pour développer la réponse de @ hunter, la raison en est que, sans crochets, il n'exécutera que la ligne suivante, s'il s'agissait d'un groupe de nids, les autres auraient besoin de crochets:

if(condition0) 
  statement0;
else
{
  if(condition1)
    statement1;
  else
  {
    if(condition2)
      statement2;
    else
    {
      if(condition3)
        statement3;
      else
      ...
    }
  }
}
1
Dustin Laine

Instruction de sélection de la spécification de langage C # affiche uniquement les instructions if et switch. Si vous sélectionnez l'instruction if, elle indique:

L'instruction if sélectionne une instruction à exécuter en fonction de la valeur d'une expression booléenne.

instruction if:

if (expression-booléenne) instruction-intégrée

if (expression-booléenne) instruction-intégrée else instruction-intégrée expression-booléenne: expression

Une autre partie est associée à la précédente lexiquement la plus proche si cela est autorisé par la syntaxe

1
SwDevMan81

Les deux exemples que vous donnez sont équivalents dans toutes les langues. En C ou C #, c'est exactement équivalent à un autre, alors si. Dans certaines autres langues, elseif est du sucre syntaxique pour else, alors si. Donc, peu importe la langue que vous utilisez, ils se compileront dans le même code (ou seront interprétés avec le même comportement). Voir http://en.wikipedia.org/wiki/Conditional_%28programming%29#Else_If

1
Tegan Mulholland