Во всех случаях, которые я видел, это связано с инициализаторами массива. Если вы посмотрите на типы, созданные в, вы заметите, что компилятор только что создал другую структуру для каждого массива размера, который вы инициализировали. Компилятор делает это, чтобы уменьшить размер IL, ускорить выделение памяти для элементов массива и сохранить элементы массива, хранящиеся в памяти, вместе и по порядку. Не углубляясь в сорняки, я просто упомяну, что выполнение этого таким образом означает, что инициализация массива любого размера происходит в известном и постоянном количестве инструкций IL. Я не могу вспомнить, копаясь в ILDasm, но я думаю, что их было 4. Назначение по одной означает 4 инструкции на элемент.
Теперь к вашей конкретной проблеме. Это не так уж плохо, когда вы понимаете, что имеете дело только с экземплярами типа значения, которые нужно переименовать. Некоторый поиск в рефлекторе должен выявить экземпляры, в которых используются сгенерированные компилятором объекты. Исходное объявление и инициализация будут сохранены в источнике. Это все, что вам нужно сделать с глобальным переименованием этого объекта. Выберите любое имя, которое вы хотите, и замените сгенерированное компилятором имя. Ниже я привожу другой код, иллюстрирующий это. Для словарей, которые также нуждаются в инициализации, он оптимизирует и создает новый экземпляр для каждого словаря с именем ‹>f_switch$mapn, где n снова является счетчиком.
Вы также будете иметь дело с подобной ерундой для любых свойств, для которых резервные поля были созданы автоматически. Хотя то же исправление. Создайте собственное резервное поле и используйте его.
[CompilerGenerated]
internal class <PrivateImplementationDetails>
{
// Fields
internal static $ArrayType$4 $$field-0; // data size: 4 bytes
internal static $ArrayType$4 $$field-1; // data size: 4 bytes
internal static $ArrayType$4 $$field-2; // data size: 4 bytes
internal static $ArrayType$4 $$field-3; // data size: 4 bytes
internal static $ArrayType$44 $$field-4; // data size: 44 bytes
internal static $ArrayType$4 $$field-5; // data size: 4 bytes
// Nested Types
[StructLayout(LayoutKind.Explicit, Size=4, Pack=1)]
private struct $ArrayType$4
{
}
[StructLayout(LayoutKind.Explicit, Size=0x2c, Pack=1)]
private struct $ArrayType$44
{
}
}
static GATWavHelper()
{
riffBytes = new byte[] { 0x52, 0x49, 70, 70 };
waveBytes = new byte[] { 0x57, 0x41, 0x56, 0x45 };
fmtBytes = new byte[] { 0x66, 0x6d, 0x74, 0x20 };
dataBytes = new byte[] { 100, 0x61, 0x74, 0x61 };
headerSize = 0x2c;
floatToInt16RescaleFactor = 0x7fff;
__canonicalHeader = new byte[] {
0x52, 0x49, 70, 70, 0, 0, 0, 0, 0x57, 0x41, 0x56, 0x45, 0x66, 0x6d, 0x74, 0x20,
0, 0, 0, 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 100, 0x61, 0x74, 0x61, 0, 0, 0, 0
};
}
// Fields
[CompilerGenerated]
private static Dictionary<string, int> <>f__switch$map0;
.
.
.
if (<>f__switch$map0 == null)
{
Dictionary<string, int> dictionary = new Dictionary<string, int>(3);
dictionary.Add("false", 0);
dictionary.Add("true", 1);
dictionary.Add("null", 2);
<>f__switch$map0 = dictionary;
}
if (<>f__switch$map0.TryGetValue(nextWord, out num))
{
switch (num)
.
.
.
person
Sonic Beard
schedule
01.09.2014