2013-04-09 77 views
11

我有這樣的代碼編譯MSIL中的符號<>是什麼意思?

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; 

後,我不知道是什麼意思之前的一些操作操作/符號<>。有人知道嗎?

回答

13

這是一個編譯器生成的名稱 - <>字符對於IL中的標識符是合法的,但在C#中不是。因此,編譯器知道它可以生成包含這些字符的名稱,而不會有名稱與您在代碼中使用的名稱衝突的機會。

在這種特殊情況下,<>g__initLocal0是一個新變量,它已被引入以保存正在使用initializer syntax進行初始化的類的新構造實例。原碼是:據介紹,以避免sampleClass

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

與所述部分構造實例觀察 - new SampleClass()已經執行之後,但在分配到XY發生之前。即如果Y = 10引發異常,則確保sampleClass保持爲null,而不是新的SampleClass,其中X設置爲5,某些未知值爲Y

+1

有關這些名稱形成的確切信息,請參閱[Eric Lippert的此答案](http://stackoverflow.com/a/2509524/41071)。 – svick 2013-04-09 10:59:22