Что означает символ в 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;
Я не знаю, что означает оператор / символ перед некоторыми операциями. Кто-нибудь знает?
1 ответ:
Это имя, сгенерированное компилятором-символы
<>
разрешены для идентификаторов в IL, но не в C#. Таким образом, компилятор знает, что он может генерировать имена, содержащие такие символы, без каких-либо шансов, что имя будет конфликтовать с именем, которое вы использовали в своем коде.В данном конкретном случае
<>g__initLocal0
- это новая переменная, введенная для хранения нового экземпляра класса, который инициализируется с помощью синтаксиса инициализатора . Оригинальный код было:sampleClass = new SampleClass() { X = 5, Y = 10};
Вводится для того, чтобы избежать
sampleClass
наблюдения с частично построенным экземпляром - после того, какnew SampleClass()
будет выполнено, но до того, как появятся назначенияX
иY
. Т. е. еслиY = 10
создает исключение, то оно гарантирует, чтоsampleClass
остаетсяnull
, а не новыйSampleClass
сX
, установленным в 5 и некоторым неизвестным значением дляY
.