2010-08-27 12 views
15

Ich frage mich, wann genau kann ich die foreach-Schleife verwenden? Muss ich IEnumerable implementieren?Ist IEnumerable erforderlich, um eine foreach-Schleife zu verwenden?

+6

[1. Antwort] (http://msdn.microsoft.com/fr-fr/library/ttw7t8t6%28VS.80%29.aspx) bei Google. – pascal

+0

http://msdn.microsoft.com/en-us/library/9yb8xew9(VS.80).aspx – Dave

+12

Sie können sie dienstags und donnerstags und während des fünften Wochenendes eines Kalendermonats verwenden. –

Antwort

2

können Sie foreach obwohl jedes Objekt, das IEnumerable oder IEnumberable<T> implementiert

37

Es gibt keine Notwendigkeit, die IEnumerable-Schnittstelle zu implementieren, ist die foreach-Anweisung zu verwenden. Hier ist ein Zitat aus der MSDN (http://msdn.microsoft.com/en-us/library/9yb8xew9.aspx):

In C#, ist es nicht unbedingt notwendig, für eine Sammlung Klasse erbt von IEnumerable und IEnumerator um mit foreach kompatibel zu sein. Solange wie die Klasse hat die erforderlichen GetEnumerator, MoveNext, Reset und Aktuelle Mitglieder, es wird mit foreach arbeiten. Das Auslassen der Schnittstellen hat den Vorteil, dass Sie den Rückgabetyp von Current zu spezifischer als Object zu definieren, die bietet Typ-Sicherheit.

+0

Wie dieser, weil es korrekt besagt, dass IEnumerable ist nicht nötig. Es macht jedoch das Leben leichter. –

+4

Das ist wirklich interessant, und das wusste ich nicht. Aber ich würde annehmen, dass dies hauptsächlich die Typsicherheit in .NET 1.0 unterstützt. Ich würde sagen, der beste Weg zur Gewährleistung der Typensicherheit ist heutzutage die Verwendung der generischen Version von IEnumerable. –

+0

+1 Jeden Tag etwas Neues lernen. – BoltClock

2

Fragen Sie sich - brauchen Sie wirklich ein Schleifenzähler

Als Faustregel ich Bestimmung verwenden, wenn ich Daten zwischen zwei indizierte Container bewege, wo ich wirklich tun Benötigen Sie einen Indexwert, um das Ziel zu adressieren, oder, allgemeiner, brauche ich eine Indexzahl für jedes Element, das ich in der Schleife verarbeite? In diesen Fällen benutze ich eine for-Schleife, in fast allen anderen Fällen (wo foreach mit dem Container umgehen kann, was wie oben erwähnt ziemlich jeder Container ist) - der Grund ist ziemlich einfach, es sieht ziemlich dumm aus foreach und Dann müssen Sie sich die Mühe machen, einen Schleifenzähler manuell zu warten.

Verwandte Themen