-1

Si vous êtes obligé de simplifier les mots-clés C# pouvant être utilisés pour la mise en boucle, choisissez-en un seul.Si vous êtes obligé de simplifier les mots clés en boucle C#, choisissez-en un seul.

  • pour
  • do-while
  • tout
  • goto-étiquette si
  • foreach

Y at-il compte de la performance en ce qui concerne votre décision?

En fait, je ne connais pas le mécanisme interne d'eux, alors ici, je veux interviewer ceux d'entre vous connaissent les détails. Cependant, quelqu'un l'a déjà fermé. Si triste!

+0

Je garderais totalement le goto-label-if. –

+3

pourquoi ce wiki n'est-il pas communautaire? –

+1

Qui a besoin de boucles plus? Nous avons LINQ! –

Répondre

6

goto-label-if est pas en fait en boucle. Et vous manqué foreach.

CS theory states, que vous avez seulement besoin while d'exprimer tout le reste (Même si vous deviez inventer un langage de programmation impératif vraiment minimal, les appels de sous-programme et la boucle while suffiront

+0

Merci. Je vais modifier et ajouter foreach. – xport

+0

Vous ne voulez pas entendre cela mais ils parlent de sauts pas de boucles. –

+0

@Matthew Désolé? Les sauts nécessitent 'goto', ce qui fait que le programme qui l'utilise n'est pas très structuré. –

4

While. Tout le reste peut être émulé dans une boucle while.

Je serais triste, parce que j'aime mes boucles pour :-(

5

Je garderais goto-label-if. mpiler transforme tout en tout cas. La forme la plus basique du contrôle de flux est la dérivation conditionnelle et cela se fait avec les opcodes branch/jump.

J'ai des exemples de conversions de boucle sur la réponse à another question.

... ce code C# ...

static void @ifgoto(bool input) 
{ 
    label: 
     if (input) 
      goto label; 
}  
static void @while(bool input) 
{ 
    while (input) ; 
} 
static void @for(bool input) 
{ 
    for (; input;) ; 
} 

... Compile ce ...

.method private hidebysig static void ifgoto(bool input) cil managed 
{ 
    .maxstack 8 
    L_0000: ldarg.0 
    L_0001: brtrue.s L_0000 
    L_0003: ret 
} 
.method private hidebysig static void while(bool input) cil managed 
{ 
    .maxstack 8 
    L_0000: ldarg.0 
    L_0001: brtrue.s L_0000 
    L_0003: ret 
} 
.method private hidebysig static void for(bool input) cil managed 
{ 
    .maxstack 8 
    L_0000: ldarg.0 
    L_0001: brtrue.s L_0000 
    L_0003: ret 
} 

.. Pour expliquer cela plus ...

// load input 
L_0000: ldarg.0 
// if input is true branch to L_000 
L_0001: brtrue.s L_0000 
// else return 
L_0003: ret 
+1

Merci de voter ... vous voulez dire pourquoi vous n'êtes pas d'accord? –

+1

+1 - parce que c'est certainement le plus puissant ... – Milan

+0

Démonstration très utile. – xport

1

Je laisserais for boucle - vous pouvez omettre une partie de cette boucle et simuler d'autres boucles. Et dans le même temps, vous obtiendrez une boucle plus puissante si vous utilisez toutes les parties.