web-dev-qa-db-fra.com

Comment exécuter LINQ et / ou foreach dans la fenêtre immédiate dans VS 2013?

La fenêtre immédiate est des outils extrêmement utiles lors de la vérification de l'état actuel pendant le processus de débogage. J'ai appris qu'en utilisant le point d'interrogation, on peut en faire un peu plus comme indiqué dans cet article .

Cependant, je ne sais toujours pas comment y exécuter des requêtes LINQ ( y compris expressions lambda). J'ai également échoué à exécuter une instruction foreach.

Lors de l'exécution des instructions suivantes:

?(things.Select(thing=>thing.Id);)
?(foreach(var thing in things);)

Je reçois ces erreurs:

L'expression ne peut pas contenir d'expressions lambda
Terme d'expression non valide 'foreach'

(Comment) puis-je les exécuter dans la fenêtre immédiate?

Il y a aussi un outil dans VS Gallery mais on dit qu'il ne fonctionne que pour VS05 et VS08, que la plupart des programmeurs ont laissé il y a très longtemps. Je recherche quelque chose qui s'applique à VS13 et/ou VS15.

18
Konrad Viltersten

Selon les nouvelles fonctionnalités disponibles dans Visual Studio 2015, la prise en charge du débogage des lambdas est désormais disponible dans la fenêtre de surveillance/immédiate:

Expressions Lambda dans les fenêtres de débogage

Vous pouvez désormais utiliser des expressions lambda dans les fenêtres Watch, Immediate et Debugger en C # et Visual Basic.

La source:

Visual Studio 2015 RTM

12
Ric

Dans VS2015, vous pouvez utiliser des expressions lambda dans la fenêtre de surveillance et la fenêtre immédiate.

Ajoutez simplement la montre ou tapez dans la fenêtre immédiate (pendant le débogage et things est dans la portée):

things.Select(thing => thing.Id);

et vous obtiendrez une liste de résultats.

Voici un blog sur this

4
Jamie Rees

Malheureusement, il semble impossible d'utiliser les lambda depuis la fenêtre immidiate ou la fenêtre de surveillance. La raison technique en est probablement que les requêtes linq sont généralement converties en expressions normales et que cela nécessite en quelque sorte une étape de compilation complète au lieu de la supercherie utilisée par ces deux fenêtres.

Au cas où vous ne connaissiez pas le thing=>thing.Id part est une expression lambda.

0
Roy T.