2009-04-07 17 views
1

Je regardais le YUI Compressor et suis tombé sur ce morceau de code dans le projet ECMA.NET (fichier de continuation si vous êtes intéressé).Code Curiosité

protected internal override int FindPrototypeId (string s) 
    { 
     int id; 
     #region Generated PrototypeId Switch 
    L0: { 
      id = 0; 
      string X = null; 
      if (s.Length == 11) { X = "constructor"; id = Id_constructor; } 
      if (X != null && X != s && !X.Equals (s)) 
       id = 0; 
     } 
    EL0: 
     #endregion 
     return id; 
    } 

Je ne sais pas ce que L0: et EL0: font ici et ont jamais vu auparavant. Le terme semble trop rudimentaire pour google aussi bien.

Quelqu'un sait quelque chose à ce sujet?

Répondre

9

Ils ressemblent à des étiquettes à utiliser comme cibles goto. Voir http://msdn.microsoft.com/en-us/library/13940fs2.aspx pour plus d'informations.

+0

J'avais peur de ça. –

+0

C# a goto? ... –

+0

@Ty, @C. Ross: Oui, C# a goto. En fait, les boucles ne sont vraiment rien de plus que la syntaxe du sucre autour d'un goto. –

5

Ils ressemblent à des étiquettes pour moi. L'étiquette n'est pas utilisée dans cet exemple (parce que c'est du code généré?), Mais peut être utilisée pour sauter à un autre endroit. Vous pouvez utiliser goto L0; pour sauter le premier label. À titre d'exemple, le code suivant écrit juste « Bonjour, monde », car il saute au milieu Write():

Console.Write("Hello, "); 
goto Last; 
Console.Write("Cruel "); 
Last: 
Console.WriteLine("World"); 
2

Ce sont des étiquettes, comme dans GOTO.

1

Ils sont évidemment des étiquettes, mais je ne pense pas qu'ils sont utilisés comme cibles goto. J'imagine qu'ils sont conçus pour être reconnus par un outil de génération de code quelconque. L'outil de génération de code "possède" le code entre L0 et EL0, ce qui signifie probablement "fin L0".