1

我正在查看YUI Compressor并在 ECMA.NET 项目中遇到了这段代码(如果您有兴趣,请继续阅读文件)。

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;
    }

我不知道 L0: 和 EL0: 在这里做什么,以前从未见过。这个词对谷歌来说似乎也太初级了。

有人知道这是什么一回事吗?

4

5 回答 5

9

它们看起来像用作 goto 目标的标签。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/13940fs2.aspx

于 2009-04-07T20:35:31.587 回答
5

它们对我来说就像标签。这个例子中没有使用标签(因为它是生成的代码?),但可以用来跳转另一个地方。您可以使用goto L0;跳转第一个标签。例如,下面的代码只写了“Hello, World”,因为它跳过了中间Write()

Console.Write("Hello, ");
goto Last;
Console.Write("Cruel ");
Last:
Console.WriteLine("World");
于 2009-04-07T20:36:21.910 回答
2

这些是标签,就像在 GOTO 中一样。

于 2009-04-07T20:36:28.260 回答
1

它们显然是标签,但我不认为它们被用作 goto 目标。我想它们被设计为被某种代码生成工具识别。代码生成工具“拥有”L0 和 EL0 之间的代码,这可能只是意味着“结束 L0”。

于 2009-04-07T20:42:44.750 回答
0

L0 和 EL0 看起来像goto 语句的标签

于 2009-04-07T20:38:45.573 回答