En todos los casos que he visto esto tiene que ver con los inicializadores de matriz. Si observa los tipos creados en, notará que el compilador acaba de crear una estructura diferente para cada matriz de tamaño que haya inicializado. El compilador hace esto para reducir el tamaño de IL, la asignación de memoria de velocidad para los elementos de la matriz y para mantener los elementos de la matriz almacenados en la memoria juntos y en orden. Sin llegar a profundizar en las malas hierbas, mencionaré que hacerlo de esta manera significa que cualquier inicialización de matriz de tamaño ocurre en un número conocido y constante de instrucciones IL. No puedo recordarlo al cavar en ILDasm, pero creo que fue 4. Asignar uno a la vez significa 4 instrucciones por elemento.
Ahora a su problema específico. No es tan malo una vez que te das cuenta de que solo estás tratando con instancias de tipo de valor que necesitan ser renombradas. Algunas búsquedas en reflector deberían revelar las instancias en las que se utilizan los objetos generados por el compilador. La declaración original y la inicialización estarán intactas en la fuente. Sin embargo, eso es todo lo que necesita seguir con un cambio de nombre global para ese objeto. Elija cualquier nombre que desee y reemplace el nombre generado del compilador. Puse otro código a continuación que ilustra esto. Para diccionarios que también necesitan inicialización, optimiza y crea una nueva instancia para cada diccionario llamado <> f_switch $ mapn donde n es un contador nuevamente.
También tratará con tonterías similares para cualquier propiedad para la que se generaron automáticamente los campos de respaldo. La misma solución, sin embargo. Crea tu propio campo de respaldo y úsalo.
[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)
.
.
.
Obtuve uno de estos, y fue debido a una serie de constantes (ints), por ejemplo 'if (new [] {16, 32, 42, 64, 314, 1337} .Contains (something)) {. ..} '. –
Suena como un buen paso de seguridad (mejor que ofuscarlo). Estaría muy agradecido si ahora sabes de otra manera? –