tutorial metodo expresiones c# linq lambda edit-and-continue

c# - metodo - ¿Por qué no puedes editar y continuar la depuración cuando hay una expresión Lambda en el método?



linq lambda c# (3)

Lo he visto decir en otras preguntas que la sintaxis de consulta de Linq se compila en un Lambda.

Entonces, ¿por qué no puedes editar y continuar cuando hay una expresión Lambda en el método, mientras que con la notación de consulta puedes?

Lo que es más irritante, y me está considerando seriamente cambiar a usar notación de consulta en todas partes , es que incluso si su código no está en el Lambda, pero hay un Lambda en otro lugar con el mismo método, ¡no puede editar y continuar! ¡Es como un dolor gratuito infligido a desarrolladores incautos!


Editar y continuar es capaz de cambiar implementaciones de métodos "en vivo", pero no qué campos están en tipos.

Las expresiones Lambda (y métodos anónimos) pueden terminar creando sus propios tipos privados cuando capturan variables. Cambiar la expresión lambda puede cambiar los tipos involucrados, lo que rompería la edición y continuaría.

Parece que debería ser posible hacer cambios en el código que no tienen este impacto, pero sospecho que es más fácil prevenirlo por completo, lo que también significa que no comienzas a hacer cambios y luego descubres que estás prevenido. a la mitad de tu cambio.

(Personalmente, no soy fanático de E & C en primer lugar, así que nunca lo había notado).


No lo sé con certeza, pero supongo que tiene que ver con la forma en que el compilador convierte expresiones lambda que forman cierres en clases generadas por el compilador. Probablemente no haya una forma (fácil) de aplicar los cambios realizados al código compilado y preservar el estado actual.


No sé con certeza, pero creo que es la complejidad de averiguar qué debe cambiar cuando hay variables locales involucradas que se elevan a las clases. Supongo que averiguar qué cambios sería seguro y qué no se consideró complejo y propenso a errores en este punto. Las herramientas en 2010 se centraron en el enhebrado y la nueva interfaz de usuario, tal vez lo obtengamos en la próxima versión.