MSIL中的符号<>代表什么?

14

我在反编译后得到了这段代码

    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;
我不知道某些操作前的运算符/符号 <> 是什么意思。有人知道吗?
1个回答

15

在这种特殊情况下,<>g__initLocal0 是一个新变量,用于保存正在使用初始化器语法初始化的类的新构造实例。原始代码如下:
sampleClass = new SampleClass() { X = 5, Y = 10};

引入此方法是为了避免在执行new SampleClass()之后,但在对XY进行赋值之前,观察到部分构造的实例sampleClass。即使Y = 10抛出异常,这确保了sampleClass仍然保持为null,而不是一个新的SampleClass,其中X被设置为5,而Y则具有某些未知的值。


2
有关这些名称是如何形成的信息,请参阅Eric Lippert的此答案 - svick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接