Wenn eine Ausnahme von IEnumerator geworfen .MoveNext () oder .Current, muss es noch angeordnet sein werden?
-
08-10-2019 - |
Frage
Intuitiv glaube ich ja, aber ich bin mir nicht sicher, ob es einige Konvention Ich kenne nicht.
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.