Ja, es gibt einen sehr guten Grund, warum Sie das nicht tun können. Der einfache Grund ist Kosten. Die Kosten für die Aktivierung dieser Funktion in C# (oder VB) sind extrem hoch.
Das Bearbeiten einer Lambda-Funktion ist ein spezieller Fall einer Klasse von ENC-Problemen, die mit der aktuellen ENC (Edit'n'Continue) -Architektur sehr schwer zu lösen sind. Das heißt, es ist sehr schwierig, jede Methode zu ENC, die, wo die ENC hat eine der folgenden Möglichkeiten: -
- generiert Metadaten in Form einer Klasse
- Edits oder erzeugt eine generische Methode
Die Das erste Problem ist mehr eine logische Einschränkung, aber es stößt auch in ein paar Einschränkungen in der ENC-Architektur. Das Problem ist nämlich, die erste Klasse zu generieren ist nicht besonders schwierig. Was störend ist, erzeugt die Klasse nach der zweiten Bearbeitung. Die ENC-Engine muss beginnen, die Symboltabelle nicht nur für den Live-Code, sondern auch für die generierten Klassen zu verfolgen. Normalerweise ist das nicht so schlimm, aber dies wird zunehmend schwierig, wenn die Form einer generierten Klasse auf dem Kontext basiert, in dem sie verwendet wird (wie es bei Lambda aufgrund von Schließungen der Fall ist). Noch wichtiger: Wie lösen Sie die Unterschiede zu Instanzen der Klassen, die bereits in diesem Prozess existieren?
Das zweite Problem ist eine strenge Begrenzung in der CLR ENC-Architektur. Es gibt nichts, was C# (oder VB) tun könnte, um dies zu umgehen.
Lambdas schlug leider beide dieser Probleme tot auf. Die kurze Version ist, dass ENC'ing ein Lambda viele Mutationen auf bestehenden Klassen beinhaltet (die möglicherweise von anderen ENCs erzeugt wurden oder nicht). Das große Problem besteht darin, die Unterschiede zwischen dem neuen Code und den vorhandenen Closure-Instanzen, die im aktuellen Prozessbereich vorhanden sind, zu lösen. Außerdem tendieren Lambdas dazu, Generika viel mehr als andere Codes zu verwenden und treffen auf Nummer 2.
Die Details sind ziemlich haarig und ein bisschen zu kompliziert für eine normale SO-Antwort. Ich habe überlegt, einen längeren Blogeintrag zu diesem Thema zu schreiben. Wenn ich dazu komme, werde ich es in diese spezielle Antwort zurückverwandeln.
Direkt aus dem Maul des Pferdes. +1 –
@Jon Wir hatten viele interne Treffen zu diesem Thema und ich musste diese Präsentation viele Male geben. Ich muss wirklich einen vollständigen doc zu diesem Thema schreiben. Bloggen scheint ein guter Ort dafür zu sein. Es gibt Hoffnung, dass dies in einer zukünftigen Version von VS gelöst wird. – JaredPar
Bitte schreibe einen Blog darüber. – Eyvind