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