IEnumerableT stellt zwei GetEnumerator-Methoden zur Verfügung - was ist der Unterschied zwischen ihnen?

7

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?

    
pkolodziej 18.02.2009, 11:27
quelle

5 Antworten

8

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.

    
Tamas Czinege 18.02.2009, 11:33
quelle
30

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:

%Vor%     
Michael B 18.02.2009 11:33
quelle
9

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%     
Andrew Hare 18.02.2009 11:33
quelle
4

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).

    
Anton Gogolev 18.02.2009 11:32
quelle
2

Der eine ist generisch, der andere nicht. Ich glaube, dass der Compiler die generische Überladung bevorzugt.

    
grover 18.02.2009 11:31
quelle

Tags und Links