2009-08-13 9 views
7

Mit Java Iterator s habe ich die Methode hasNext verwendet, um festzustellen, ob eine Iteration mehr Elemente enthält (ohne ein Element zu verbrauchen) - also ist wie eine "Peek" -Methode.Gibt es eine HasNext-Methode für einen IEnumerator?

Meine Frage: Gibt es etwas wie eine "hasNext" oder "Peek" Methode mit C# 's generischen IEnumerator s?

+5

Wie könnten Sie möglicherweise nicht wissen? Ist es möglich, dass Sie http://msdn.microsoft.com/en-us/library/78dfe2yb.aspx noch nie gesehen haben? –

+0

Vielen Dank, dass Sie darauf hingewiesen haben, Mr. Saunders. – JaysonFix

Antwort

15

Nein, leider nicht.

Die IEnumerator<T> Interface nur die folgenden Mitglieder:

Methoden:

Dispose
MoveNext
Reset

Prope rties:

Current

+1

Danke, Andrew. – JaysonFix

+1

Wir nehmen IEnumerator statt IEnumerable hier, oder? Und * sollte auf Dispose statt auf MoveNext stehen. –

+0

@Even - Huch, diese Post war voller Fehler! Danke für das Aufzeigen. –

2

Nope, nur MoveNext, Reset und Current.

33

Nein, aber in C# können Sie wiederholt nach dem aktuellen Element fragen, ohne zum nächsten zu wechseln. Es ist nur eine andere Sichtweise.

Es wäre nicht zu schwer, eine C# Klasse zu schreiben Iterator nimmt einen .NET-Stil IEnumerator und gibt einen Java-Stil. Persönlich finde ich den .NET-Stil einfacher in den meisten Fällen zu verwenden, aber da gehen wir :)

EDIT: Okay, das ist völlig ungetestet, aber ich denke, wird es funktionieren. Es kompiliert zumindest :)

+0

+1 Es ist wirklich nur eine andere Sicht auf das gleiche Muster. –

+0

(Ich bin glücklich, den Adapter zu kodieren, wenn jemand interessiert ist, aber ich werde es sonst nicht tun ...) –

+3

Ich wäre daran interessiert, es zu sehen, Jon. – JaysonFix

3

Enumeratoren werden oft faul ausgewertet, so dass HasNext wenig Sinn macht.