2009-08-16 9 views

Répondre

8

réponse courte: Une fois

Réponse longue:

Le code est compilé dans l'IL suivant. Vous pouvez l'essayer vous-même en compilant le fichier C# puis en l'ouvrant dans ILDASM (distribué avec Visual Studio) ou .NET Reflector (qui peut afficher le code désassemblé dans de nombreuses langues et dispose d'infobulles pour les instructions IL avec description détaillée).

L_0008: ldloc.0 
L_0009: callvirt instance string [mscorlib]System.String::ToLowerInvariant() 
L_000e: stloc.2 
L_000f: ldc.i4.0 
L_0010: stloc.3 
L_0011: br.s L_0021 
L_0013: ldloc.2 
L_0014: ldloc.3 
L_0015: callvirt instance char [mscorlib]System.String::get_Chars(int32) 
L_001a: stloc.1 
L_001b: nop 
L_001c: nop 
L_001d: ldloc.3 
L_001e: ldc.i4.1 
L_001f: add 
L_0020: stloc.3 
L_0021: ldloc.3 
L_0022: ldloc.2 
L_0023: callvirt instance int32 [mscorlib]System.String::get_Length() 
L_0028: clt 
L_002a: stloc.s flag 
L_002c: ldloc.s flag 
L_002e: brtrue.s L_0013 

la condition de boucle réelle est vérifiée sur des lignes L_0021 à L_002c et puis il y a saut à la ligne L_002e qui est exécutée, sinon tous les caractères sont encore traités. Notez qu'il saute à L_0013 qui est après l'appel ToLowerInvariant.

2

une fois ... puis une boucle à travers chacune des valeurs qui se sont retournés par l'appel

Questions connexes