符号<>是什么在MSIL中意味着什么?

时间:2013-04-09 07:16:15

标签: c# .net cil

我在反编译后有了这段代码

    SampleClass sampleClass;
    SampleClass <>g__initLocal0;
    int y;
    sampleClass = null;
Label_0018:
    try
    {
        <>g__initLocal0 = new SampleClass();
        <>g__initLocal0.X = 5;
        <>g__initLocal0.Y = 10;
        sampleClass = <>g__initLocal0;
        goto Label_003A;
    }
    catch (Exception)
    {
    Label_0035:
        goto Label_003A;
    }
Label_003A:
    y = sampleClass.Y;

我不知道操作符/符号是什么意思&lt;&gt;在一些操作之前。有人知道吗?

1 个答案:

答案 0 :(得分:13)

这是一个编译器生成的名称 - <>字符对于IL中的标识符是合法的,但在C#中则不合法。因此,编译器知道它可以生成包含这些字符的名称,而且名称不会与您在代码中使用的名称冲突。

在这种特殊情况下,<>g__initLocal0是一个新变量,它被引入来保存正在使用initializer syntax初始化的类的新构造实例。原始代码是:

sampleClass = new SampleClass() { X = 5, Y = 10};

这是为了避免在部分构造的实例中观察到sampleClass - 在执行new SampleClass()之后但在XY的分配发生之前。即如果Y = 10引发异常,则会确保sampleClass保持null而不是新SampleClass X设置为5且{{1}的某些未知值}}

相关问题