2013-04-09 6 views
11

Ich habe diesen Code nach decompileWas bedeutet das Symbol <> in 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; 

Ich weiß nicht, was bedeutet Operator/Symbol <> vor einigen Operationen. Weiß jemand das?

Antwort

13

Es ist ein Compiler generierten Namen - die <> Zeichen sind legal für Kennungen in IL, aber nicht in C#. Daher weiß der Compiler, dass er Namen generieren kann, die solche Zeichen enthalten, ohne dass der Name einen Konflikt mit einem Namen verursacht, den Sie in Ihrem Code verwendet haben.

In diesem speziellen Fall ist <>g__initLocal0 eine neue Variable, die eingeführt wurde, um eine neu erstellte Instanz einer Klasse zu enthalten, die mit initializer syntax initialisiert wird. Der ursprüngliche Code war:

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

Es eingeführt ist mit dem teilweise konstruierten Beispiel beobachtet zu vermeiden sampleClass wird - nach new SampleClass() ausgeführt hat, aber bevor die Zuweisungen zu X und Y auftreten. I.e. Wenn Y = 10 eine Ausnahme auslöst, wird sichergestellt, dass sampleClassnull bleibt und keine neue SampleClass mit X auf 5 und einige unbekannte Werte für Y.

+1

Für Informationen darüber, wie genau diese Namen gebildet werden, siehe [diese Antwort von Eric Lippert] (http://stackoverflow.com/a/2509524/41071). – svick