No, no puede usar expresiones lambda en la ventana watch/locals/immediate. Como Marc ha señalado, esto es increíblemente complejo. Sin embargo, quería adentrarme un poco más en el tema.
Lo que la mayoría de las personas no consideran al ejecutar una función anónima en el depurador es que no ocurre en un vacío. El solo hecho de definir y ejecutar una función anónima cambia la estructura subyacente de la base de código. Cambiar el código, en general, y en particular desde la ventana inmediata, es una tarea muy difícil.
Tenga en cuenta el siguiente código.
void Example() {
var v1 = 42;
var v2 = 56;
Func<int> func1 =() => v1;
System.Diagnostics.Debugger.Break();
var v3 = v1 + v2;
}
Este código particular crea un solo cierre para capturar el valor v1. Se requiere captura de cierre siempre que una función anónima use una variable declarada fuera de su alcance. Para todos los efectos, v1 ya no existe en esta función. La última línea en realidad se parece más a la siguiente
var v3 = closure1.v1 + v2;
Si la función se ejecuta el ejemplo en el depurador se detendrá en la línea de rotura. Ahora imagínese si el usuario escribió lo siguiente en la ventana de inspección
(Func<int>)(() => v2);
Con el fin de ejecutar correctamente este el depurador (o más apropiado el EE) necesitaría para crear un cierre para la variable V2. Esto es difícil pero no imposible de hacer.
Lo que realmente hace que este sea un trabajo difícil para EE es la última línea. ¿Cómo debería ser ejecutada esa línea ahora? Para todos los efectos, la función anónima borró la variable v2 y la reemplazó con closure2.v2.Así que la última línea de código realmente necesita ahora para leer
var v3 = closure1.v1 + closure2.v2;
Sin embargo, para conseguir realmente este efecto en el código requiere EE modificar la última línea de código que es en realidad una acción ENC. Si bien este ejemplo específico es posible, una buena parte de los escenarios no lo son.
Lo que es aún peor es ejecutar esa expresión lambda no debería estar creando un nuevo cierre. En realidad, debería estar agregando datos al cierre original. En este punto, se ejecuta directamente en las limitaciones ENC.
Mi pequeño ejemplo desafortunadamente solo araña la superficie de los problemas que encontramos. Sigo diciendo que escribiré una publicación completa en este tema y espero tener tiempo este fin de semana.
Esto se ha completado y está disponible en la vista previa de VS 2015. http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2049821-debug-lambda-expressions-planned –
http://gigi.nullneuron.net/gigilabs/vs2015-preview-debugger-support- for-lambdas-y-linq/ – pedram
intenté un ejemplo muy simple dado en MSDN para la expresión lambda pero no funciona. Tengo VS 2015 edición empresarial – Adeem