2010-06-17 5 views
8

Ich schreibe eine IEnumerator<T> Klasse zu iterieren über eine Sammlung Ich bin wrappering. Ich habe bemerkt, dass IEnumerator<T> erweitert IDisposable, so dass ich die Dispose Methode implementieren muss.IEnumerator: Ist es normal, eine leere Dispose-Methode zu verwenden?

Allerdings kann ich an nichts denke ich, es setzen würde, da ich nur einen Verweis auf die Sammlung haben (was ich nicht am Ende eines foreach angeordnet wollen werden) und ein int für den Index . Ist es normal, die Methode Dispose leer zu lassen?

Antwort

15

Ja, ist es.

IEnumerator<T> implementiert IDisposable für den Fall, dass Sie einen Enumerator erstellen, der entsorgt werden muss. Da die meisten Enumeratoren nicht entsorgt werden müssen, ist die Methode normalerweise leer.

Übrigens können Sie Ihre IEnumerator einfacher durch creating an iterator implementieren.

+0

Danke für die Erinnerung über 'Ausbeute'. Ich dachte, es gäbe einen leichteren Weg. –

+2

Übrigens ist "yield" einer der Gründe, warum IEnumerator '' IDisposable' implementiert - eine 'using' Anweisung oder' finally' Block geht in 'Dispose'. – SLaks

+0

Beachten Sie für VB.NET-Benutzer, dass 'Yield' Visual Studio 2012 oder höher erfordert. – jrh

Verwandte Themen