Cómo hacer que el reflector no ahogarse con una nueva sintaxis
-
30-09-2019 - |
Pregunta
¿Hay una manera de hacer reflector trasero desmontar a las nuevas construcciones de C #?
propiedades implementadas-Auto están saliendo de esta manera:
[CompilerGenerated]
private string <TypeName>k__BackingField;
public string TypeName
{
[CompilerGenerated]
get
{
return this.<TypeName>k__BackingField;
}
[CompilerGenerated]
private set
{
this.<TypeName>k__BackingField = value;
}
}
tipos genéricos con enteros u objetos Strings salen mal:
Tuple<User,String><User,string>
Por no hablar de los enumeradores confusas que se generan en respuesta a algún código basado lambda.
alguna idea? Volviendo a la forma original sería grande, pero para llegar a un estado compilables equivalente sería un gran paso adelante. Los ejemplos anteriores no son válidas código C #.
Solución
En cuanto a las propiedades de auto-aplicado, salen bien (es decir, como get; set;
sin el respaldo de campo generado por el compilador) en la última versión. Sólo asegúrese de conjunto Optimization
a .NET 3.5
o .NET 4.0
en View -> Options -> Disassembler
.
Otros consejos
No todo es una traducción de dos vías. Cosas como las expresiones lambda, iteradores y propiedades implementadas automáticamente son azúcar sintáctica en C # que se compilan en código real para nosotros. No siempre es posible tomar el código compilado y determinar lo que el código original parecía.
Si Reflector suposiciones sobre el código con el fin de detectar los resultados de estas abstracciones sintácticas y luego Microsoft cambió el compilador, que se rompería de nuevo. Reflector lugar parece optar por basar su descompilación de las especificaciones CLR y lingüísticos que están menos sujetos a cambio sin previo aviso.
Bueno, obviamente, Reflector simplemente no tiene esa función hasta el momento. Ni siquiera se ha puesto al día con C # 3.0, sin embargo, mucho menos de C # 4.0. Sólo esperar a la próxima versión (si habrá uno).