Sí, hay una muy buena razón por la que no puede hacer esto. La simple razón es el costo. El costo de habilitar esta función en C# (o VB) es extremadamente alto.
Editar una función lambda es un caso específico de una clase de problemas ENC que son muy difíciles de resolver con la arquitectura ENC (Edit'n'Continue) actual. Es decir, es muy difícil de ENC cualquier método que en la ENC realiza una de las siguientes: -
- Genera metadatos en forma de una clase
- Edita o genera un método genérico
El El primer problema es más una restricción lógica, pero también se topa con un par de limitaciones en la arquitectura ENC. A saber, el problema es generar la primera clase no es terriblemente difícil. Lo molesto es generar la clase después de la segunda edición. El motor ENC debe comenzar a rastrear la tabla de símbolos no solo para el código activo, sino también para las clases generadas. Normalmente, esto no es tan malo, pero esto se vuelve cada vez más difícil cuando la forma de una clase generada se basa en el contexto en el que se utiliza (como es el caso de lambdas debido a cierres). Más importante aún, ¿cómo se resuelven las diferencias frente a las instancias de las clases que ya están activas en el proceso?
El segundo problema es una limitación estricta en la arquitectura CLR ENC. No hay nada que C# (o VB) pueda hacer para evitar esto.
Lambdas desafortunadamente golpeó estas dos cuestiones sin éxito. La versión corta es que ENC'ing a lambda implica muchas mutaciones en las clases existentes (que pueden o no haberse generado a partir de otras ENCs). El gran problema consiste en resolver las diferencias entre el nuevo código y las instancias de cierre existentes en el espacio de proceso actual. Además, las lambdas tienden a usar genéricos mucho más que otros códigos y llegan al problema n. ° 2.
Los detalles son bastante peludos y demasiado complicados para una respuesta SO normal. He considerado escribir una larga publicación en el blog sobre el tema. Si lo hago, lo vincularé nuevamente a esta respuesta en particular.
Directo de la boca del caballo. +1 –
@Jon Hemos tenido muchas reuniones internas sobre este tema y he tenido que dar esta presentación muchas veces. Realmente necesito escribir un doc completo sobre el tema. Blogging parece ser un buen lugar para eso. Existe la esperanza de que esto se resuelva en una versión futura de VS. – JaredPar
Por favor, escriba un blog al respecto. – Eyvind