Frage

Gibt es eine Möglichkeit Reflektor disassemble zurück zu den neuen c # Konstrukten zu machen?

Auto-Implementiert Eigenschaften kommen aus wie folgt:

[CompilerGenerated]
private string <TypeName>k__BackingField;
 public string TypeName
 {
     [CompilerGenerated]
     get
      {
         return this.<TypeName>k__BackingField;
      }
      [CompilerGenerated]
      private set
      {
          this.<TypeName>k__BackingField = value;
      }
 }

generische Typen mit Strings Ints oder Objekten kommen falsch:

Tuple<User,String><User,string>

Nicht die verwirrend Enumeratoren zu erwähnen, die in Reaktion auf eine Lambda-basierten Code erzeugt werden.

Irgendwelche Ideen? Kommen sie zurück würde in der ursprünglichen Form groß sein, aber zu einem äquivalenten übersetzbaren Zustand bekommen würde ein großer Schritt vorwärts sein. Die obigen Beispiele sind nicht gültig C # -Code.

War es hilfreich?

Lösung

In Bezug automatisch implementierte Eigenschaften, sie kommen in Ordnung (das heißt als get; set; ohne den Compiler generierte Träger-Feld) in der neuesten Version. So stellen Sie sicher, dass Sie Satz Optimization zu .NET 3.5 oder .NET 4.0 in View -> Options -> Disassembler.

Andere Tipps

Nicht alles ist eine Zwei-Wege-Übersetzung. Dinge wie Lambda-Ausdrücke, Iteratoren und automatisch implementierte Eigenschaften sind syntaktischer Zucker in C #, die in echten Code für uns zusammengestellt bekommen. Es ist nicht immer möglich diesen kompilierten Code zu nehmen und festzustellen, was der ursprüngliche Code aussah.

Wenn Reflektor aus Annahmen über den Code, um die Ergebnisse dieser syntaktischen Abstraktionen zu erkennen und dann änderte Microsoft den Compiler, würde es wieder gebrochen werden. Reflektor erscheint stattdessen wählen ihre Dekompilierung auf die CLR und Sprachspezifikationen basieren, die weniger Änderungen vorbehalten ohne vorherige Ankündigung.

Nun, offensichtlich, Reflektor hat einfach nicht diese Funktion noch. Es hat sich nicht einmal mit C # 3.0 noch viel weniger C # 4.0 gefangen. Warten Sie einfach für die nächste Version (wenn es sein).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top