Frage

Ich versuche, meinen Code zu debuggen, die von einem Unit-Test-Projekt ausgeführt wird, aber wenn ich in ein Verfahren zu Schritt versuchen, es geht nur geradeaus auf die nächste Zeile und der Haltepunkt innerhalb dieser Methode wird nicht getroffen. Das Verfahren ist auf einer Klasse, die in einem anderen Projekt, aber die gesamten Code im Debug-Modus gebaut und ich habe versucht, Reinigung und Wiederaufbau die Lösung ohne Freude.

Dies ist jedoch nur geschehen, seit ich ein Iteratorblock dem Verfahren hinzugefügt. Wenn ich es entfernen und neu zu erstellen, kann ich in feinem Schritt. Seltsam?

ich Visual Studio 2010 Beta 1 verwenden, könnte dies nur ein Fehler sein?

War es hilfreich?

Lösung

Iterator Blöcke verzögerte Ausführung verwenden - das heißt: bis Sie tatsächlich Iterieren über die Daten beginnen, nichts ausgeführt wird,

.

So: wurde die Daten wiederholt? Ist Looping etwas über die Werte? Wenn Sie Validierungslogik hinzufügen müssen, die so früh wie möglich ausgeführt wird, müssen Sie derzeit zwei Methoden:

public static IEnumerable<int> GetNumbers(int from, int to) {
    // this validation runs ASAP (not deferred)
    if (to < from) throw new ArgumentOutOfRangeException("to");
    return GetNumbersCore(from, to);
}
private static IEnumerable<int> GetNumbersCore(int from, int to) {
    // this is all deferred
    while (from <= to) {
        yield return from++;
    }
}

Andere Tipps

Marc ist richtig. Das Verfahren wird latente ausgeführt und Sie können nicht in den Verfahrensschritt, bis der Iterator tatsächlich ausführt.

Wenn ich einen Iteratorblock in einem Unit-Test debuggen müssen muss ich folgendes. Angenommen, die Methode heißt GetStuff.

[TestMethod]
public void TestGetStuff() {
  var obj = GetStuffObje();
  var list = obj.GetStuff().ToList();
}

Die .ToList () Aufruf wird der Iterator zwingen zur Vollendung auszuführen. Ich habe dann einen Haltepunkt innerhalb des GetStuff Verfahren und eine Debug-Sitzung starten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top