Wie bewertet Visual Studio IEnumerable, ohne in MoveNext des IEnumeratorT zu brechen?

8

Nehmen wir an, Sie haben einen benutzerdefinierten Enumerator für den folgenden Code geschrieben:

%Vor%

Und dann im Client-Code haben Sie das getan:

%Vor%

Setzen Sie dann einen Break-Point für die MoveNext -Methodenimplementierung Ihrer StudentEnumerator -Klasse.

Dann, wenn Sie den Code ausführen und der Debugger bricht nach dem Erstellen der Abfrage / IEnumerable in diesem Fall und erweitern Sie die Results View wie in dem unten gezeigten Bild, wie bewertet Visual Studio die Sequenz ohne in die% des Enumerators zu brechen co_de%?

Ich war schon immer neugierig darauf.

    
Water Cooler v2 09.05.2014, 20:55
quelle

2 Antworten

7

Visual Studio verwendet eine Funktion namens FuncEval, mit der die IDE Ihren Code ausführen kann. Dies ermöglicht viele nette Features, aber natürlich gibt es zahlreiche Vorbehalte dies zu tun. Beispiele sind Nebeneffekte auf Eigenschaften, Deadlocks, das Überspringen von Schritten in einer Schleife und seltsame Debuggerfahrungen.

    
Brian Rasmussen 09.05.2014, 21:01
quelle
3

Dies liegt daran, dass der Debugger nur an Ihren laufenden Prozess und nicht an das Visual Studio selbst angeschlossen ist. Wenn Sie eine zweite Kopie von Visual Studio geöffnet haben, einen Debugger an die erste Kopie von Visual Studio angefügt haben, dann einen Haltepunkt innerhalb des Codes in der 2. Kopie gesetzt haben, dass der Haltepunkt bei der Auswertung der Liste in der ersten Kopie von Visual Studio ( und die erste Kopie von Visual Studio würde hängen bleiben, bis du auf der zweiten Kopie fortfährst).

BEARBEITEN: Danke an Brians Link , die Art und Weise, wie dies geschieht, erfolgt über FuncEval .

    
Scott Chamberlain 09.05.2014 20:59
quelle