Wenn ich IEnumerable<T>
interface emplemente, sehe ich zwei GetEnumerator
-Methoden: eine gibt IEnumerator
und andere IEnumerator<T>
zurück. Wann würde ich den einen oder anderen benutzen?
Wenn Sie die generische Schnittstelle IEnumerable<T>
implementieren, müssen Sie ziemlich oft die generische GetEnumerator-Methode verwenden - es sei denn, Sie werfen Ihr Objekt explizit auf (nicht-generische) IEnumerable.
Der Grund ist die Rückwärtskompatibilität mit .NET 1.0 / 1.1, die keine Generics unterstützt.
Normalerweise implementieren Sie beide. Eine davon ist die neuere generische Version, die einen typsicheren Enumerator ( IEnumerator<T>
) zurückgibt. Der andere Code ist kompatibel mit Legacy-Code (gibt IEnumerator
zurück). Eine typische Implementierung ist:
Der Grund dafür sind zwei Methoden, weil IEnumerable<T>
die Schnittstelle IEnumerable
erbt, so dass Sie die generische Methode von IEnumerable<T>
und die nicht-generische Methode von IEnumerable
sehen.
So wollen Sie die Schnittstelle in Ihrem Typ implementieren:
%Vor% Normalerweise ruft GetEnumerator()
GetEnumerator<T>()
auf, daher sollte das Verhalten nicht sehr unterschiedlich sein. Warum gibt es zwei Methoden, dies ist für Rückwärtskompatibilität und für den Einsatz in Situationen, in denen T
ist nicht von großem Interesse (oder ist nur unbekannt).
Der eine ist generisch, der andere nicht. Ich glaube, dass der Compiler die generische Überladung bevorzugt.
Tags und Links ienumerable ienumerator