Код Любопытства в C # - PullRequest
       24

Код Любопытства в C #

1 голос
/ 08 апреля 2009

Я смотрел на 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: и никогда раньше этого не видел. Этот термин кажется слишком элементарным и для Google.

Кто-нибудь знает что-нибудь об этом?

Ответы [ 5 ]

9 голосов
/ 08 апреля 2009

Они выглядят как этикетки для использования в качестве целей goto. См. http://msdn.microsoft.com/en-us/library/13940fs2.aspx для получения дополнительной информации.

5 голосов
/ 08 апреля 2009

Они похожи на ярлыки для меня. Метка не используется в этом примере (потому что это сгенерированный код?), Но может использоваться для перехода в другое место. Вы можете использовать goto L0;, чтобы перейти на первую метку. Например, следующий код записывает просто «Hello, World», потому что он пропускает середину Write():

Console.Write("Hello, ");
goto Last;
Console.Write("Cruel ");
Last:
Console.WriteLine("World");
2 голосов
/ 08 апреля 2009

Это этикетки, как в GOTO.

1 голос
/ 08 апреля 2009

Они, очевидно, лейблы, но я не думаю, что они используются в качестве целей goto. Я представляю, что они предназначены для распознавания каким-либо инструментом генерации кода. Инструмент генерации кода «владеет» кодом между L0 и EL0, что, вероятно, означает «конец L0».

0 голосов
/ 08 апреля 2009

L0 и EL0 выглядят как метки для оператора goto

...