Wenn eine Ausnahme von IEnumerator geworfen .MoveNext () oder .Current, muss es noch angeordnet sein werden?

StackOverflow https://stackoverflow.com/questions/4416100

Frage

Intuitiv glaube ich ja, aber ich bin mir nicht sicher, ob es einige Konvention Ich kenne nicht.

War es hilfreich?

Lösung

Da wir nicht wissen, was die Umsetzung ist, die einzig sichere Antwort ist „Ja“.

Es ist jedoch sehr selten IEnumerator direkt zu verwenden - foreach häufiger zu sein. Für die allgemeine IEnumerator<T> können Sie eine using-Anweisung verwenden:

using(var iter = obj.GetEnumerator()) {
    ...
}

Auch ohne die generische Version, können Sie betrügen:

IEnumerator iter = obj.GetEnumerator();
using(iter as IDisposable) {
    ...
}

Welche iter wird entsorgen, wenn es IDisposable ist

Andere Tipps

Kein Wegwerf Objekt muss entsorgt werden, je. [1]

Aber sie sollte sein. Als using Block die finally Klausel verwendet, zu entsorgen und dies wird ausgeführt, ob der using Block normal verlassen wird oder über eine Ausnahme ist der Standard selbst angesichts einer Ausnahme zu entsorgen.


[1] Ich nehme man einen Buggy Implementierung haben könnte, wo eine nicht-verwaltete Ressource gehalten wird, und es gibt keine finaliser, aber die richtige Aktion gibt es eine finaliser zu implementieren.

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