2017-02-14 1 views
2

I c ziemlich neu bin scharf und war auf der Suche nach einer Antwort auf die folgenden:IEnumerator vs IEnumerator <T>

Warum wollen Sie IEnumerator<T> implementieren, wenn Sie IEnumerator haben? IEnumerator gibt das Objekt aus der Sammlung als Typobjekt zurück, also für alle Typen.

Dank

+0

Willkommen bei SO. ** Bitte stellen Sie nicht zwei Fragen in einer Frage **. Wenn Sie zwei Fragen haben, dann schreiben Sie zwei Fragen. –

+0

Ja, du hast Recht, ich werde die zweite Frage von diesem entfernen. Prost – nish91

+1

Mit 'IEnumerator ' erhalten Sie Typ Sicherheit. dh. Sie müssen den Typ des Objekts nicht überprüfen, bevor Sie es verwenden, da Sie wissen, dass es vom Typ T ist. –

Antwort

11

[Die nicht-genericized] IEnumerator kehrt das Element aus der Sammlung als Typ-Objekt zurück, so dass für alle Arten bietet.

Das ist genau das Problem. Sie wissen jetzt nichts über die Objekte, die in der Sequenz sind. Sie könnten sein alles und so müssen Sie in der Lage sein, mit alles aus dieser Sequenz kommen. Wenn Sie eine Sequenz von Giraffen oder eine Sequenz von Kunden oder eine Folge von ganzen Zahlen haben, wissen Sie, dass jedes Element in der Sequenz eine Giraffe, ein Kunde, eine ganze Zahl oder was auch immer ist. Wenn Sie eine Sequenz von Objekten haben, müssen Sie Code schreiben, der überprüft, um was für ein Objekt es sich jeweils handelt.

Mit Typinformationen kann der Compiler diese Informationen durch das System fädeln. Angenommen, wir haben eine IEnumerable<Customer>. Alles in der Sequenz ist also ein Kunde. Wenn wir dann sagen:

var first = customers.First(); 
var address = first.Address; 

Nun kann der Compiler ableiten, dass first ein Customer ist, und weiß, dass die Kunden-Adressen haben, so dass die zweite Zeile ist legal. Wenn customers nur IEnumerable waren, dann kann der Compiler nicht beweisen, dass Ihr Programm typsicher ist!

Auch einige Typen weisen eine Leistungseinbuße auf, die als "Boxstrafe" bezeichnet wird, wenn sie als object behandelt wird. Mit einer generisch typisierten Sammlung wird diese Strafe beseitigt.

+0

Brilliant Kumpel. Vielen Dank für die Antwort. – nish91

Verwandte Themen