For Each...Next-Anweisung (Visual Basic)For Each...Next Statement (Visual Basic)

Wird eine Gruppe von Anweisungen für jedes Element in einer Auflistung wiederholt.Repeats a group of statements for each element in a collection.

SyntaxSyntax

For Each element [ As datatype ] In group  
    [ statements ]  
    [ Continue For ]  
    [ statements ]  
    [ Exit For ]  
    [ statements ]  
Next [ element ]  

TeileParts

BegriffTerm DefinitionDefinition
element Erforderlich, der For Each Anweisung.Required in the For Each statement. Dies ist optional, in der Next Anweisung.Optional in the Next statement. Variable.Variable. Zum Durchlaufen der Elemente der Auflistung verwendet.Used to iterate through the elements of the collection.
datatype Erforderlich, wenn element befindet sich nicht bereits deklariert.Required if element isn't already declared. Datentyp des element.Data type of element.
group Erforderlich.Required. Eine Variable mit einem Typ, der eine Auflistung oder ein Objekt ist.A variable with a type that's a collection type or Object. Bezieht sich auf die Auflistung über den die statements wiederholt werden sollen.Refers to the collection over which the statements are to be repeated.
statements Dies ist optional.Optional. Eine oder mehrere Anweisungen zwischen For Each und Next , führen Sie für jedes Element in group.One or more statements between For Each and Next that run on each item in group.
Continue For Dies ist optional.Optional. Überträgt die Steuerung an den Anfang der For Each Schleife.Transfers control to the start of the For Each loop.
Exit For Dies ist optional.Optional. Überträgt die Steuerung von der For Each Schleife.Transfers control out of the For Each loop.
Next Erforderlich.Required. Beendet die Definition des der For Each Schleife.Terminates the definition of the For Each loop.

Einfaches BeispielSimple Example

Verwenden einer For Each... Next Schleife, wenn Sie eine Reihe von Anweisungen für jedes Element einer Auflistung oder ein Array wiederholen möchten.Use a For Each...Next loop when you want to repeat a set of statements for each element of a collection or array.

Tipp

Ein für... Nächste Anweisung funktioniert gut bei jeder Iteration einer Schleife mit einer Steuerelementvariablen zuordnen und diese Variable Anfangs- und Endwert bestimmt werden können.A For...Next Statement works well when you can associate each iteration of a loop with a control variable and determine that variable's initial and final values. Beim Umgang mit einer Auflistung jedoch das Konzept der Anfangs-und Endwert ist nicht aussagekräftig, und Sie wissen nicht unbedingt, wie viele Elemente der Auflistung aufweist.However, when you are dealing with a collection, the concept of initial and final values isn't meaningful, and you don't necessarily know how many elements the collection has. In diesem Fall eine For Each... Next Schleife ist häufig die bessere Wahl.In this kind of case, a For Each...Next loop is often a better choice.

Im folgenden Beispiel die For Each...NextIn the following example, the For EachNext -Anweisung durchläuft alle Elemente einer Auflistung der Liste aus.statement iterates through all the elements of a List collection.

' Create a list of strings by using a
' collection initializer.
Dim lst As New List(Of String) _
    From {"abc", "def", "ghi"}

' Iterate through the list.
For Each item As String In lst
    Debug.Write(item & " ")
Next
Debug.WriteLine("")
'Output: abc def ghi

Weitere Beispiele finden Sie unter Sammlungen und Arrays.For more examples, see Collections and Arrays.

Nested LoopsNested Loops

Sie können schachteln For Each Schleifen, indem Sie eine Schleife in eine andere einfügen.You can nest For Each loops by putting one loop within another.

Im folgende Beispiel wird veranschaulicht, geschachtelte For Each...NextThe following example demonstrates nested For EachNext Strukturen.structures.

' Create lists of numbers and letters
' by using array initializers.
Dim numbers() As Integer = {1, 4, 7}
Dim letters() As String = {"a", "b", "c"}

' Iterate through the list by using nested loops.
For Each number As Integer In numbers
    For Each letter As String In letters
        Debug.Write(number.ToString & letter & " ")
    Next
Next
Debug.WriteLine("")
'Output: 1a 1b 1c 4a 4b 4c 7a 7b 7c 

Wenn Sie Schleifen schachteln, jede Schleife benötigen eine eindeutige element Variable.When you nest loops, each loop must have a unique element variable.

Sie können auch verschiedene Arten von Steuerungsstrukturen ineinander schachteln.You can also nest different kinds of control structures within each other. Weitere Informationen finden Sie unter geschachtelten Steuerungsstrukturen.For more information, see Nested Control Structures.

Für beenden und fortsetzenExit For and Continue For

Die Exit For Anweisung führt zum Beenden der For...NextThe Exit For statement causes execution to exit the ForNext Schleife und überträgt die Steuerung an die Anweisung mit der Next Anweisung.loop and transfers control to the statement that follows the Next statement.

Die Continue For Anweisung überträgt die Steuerung sofort an die nächste Iteration der Schleife.The Continue For statement transfers control immediately to the next iteration of the loop. Weitere Informationen finden Sie unter Continue-Anweisung.For more information, see Continue Statement.

Das folgende Beispiel zeigt, wie Sie die Continue For und Exit For Anweisungen.The following example shows how to use the Continue For and Exit For statements.

Dim numberSeq() As Integer =
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

For Each number As Integer In numberSeq
    ' If number is between 5 and 7, continue
    ' with the next iteration.
    If number >= 5 And number <= 8 Then
        Continue For
    End If

    ' Display the number.
    Debug.Write(number.ToString & " ")

    ' If number is 10, exit the loop.
    If number = 10 Then
        Exit For
    End If
Next
Debug.WriteLine("")
' Output: 1 2 3 4 9 10

Sie können eine beliebige Anzahl von einfügen Exit For Anweisungen in einem For Each Schleife.You can put any number of Exit For statements in a For Each loop. Bei Verwendung in geschachtelten For Each Schleifen Exit For führt zum Beenden der innersten Schleife und überträgt die Steuerung auf der nächsthöheren Ebene der Schachtelung.When used within nested For Each loops, Exit For causes execution to exit the innermost loop and transfers control to the next higher level of nesting.

Exit For wird häufig verwendet, nachdem eine Auswertung einer Bedingung, z. B. in einer If... Then... Else Struktur.Exit For is often used after an evaluation of some condition, for example, in an If...Then...Else structure. Möglicherweise möchten Sie verwenden Exit For für die folgenden Bedingungen:You might want to use Exit For for the following conditions:

  • Durchlaufen Sie den Vorgang fortsetzen, ist nicht erforderlich oder unmöglich.Continuing to iterate is unnecessary or impossible. Dies kann durch einen fehlerhaften Wert oder eine Anforderung zum Beenden verursacht werden.This might be caused by an erroneous value or a termination request.

  • Wird eine Ausnahme einem Try... Catch... Finally. Sie können Exit For am Ende der Finally Block.An exception is caught in a Try...Catch...Finally. You might use Exit For at the end of the Finally block.

  • Es gibt eine Endlosschleife, also eine Schleife, die eine große oder sogar unendliche Anzahl von Malen ausgeführt werden konnte.There an endless loop, which is a loop that could run a large or even infinite number of times. Wenn Sie diese Situation erkennen, können Sie Exit For um die Schleife zu verlassen.If you detect such a condition, you can use Exit For to escape the loop. Weitere Informationen finden Sie unter werden... Loop-Anweisung.For more information, see Do...Loop Statement.

IteratorsIterators

Sie verwenden eine Iterator auf eine benutzerdefinierte Iteration durch eine Auflistung auszuführen.You use an iterator to perform a custom iteration over a collection. Ein Iterator kann eine Funktion oder ein Get Accessor.An iterator can be a function or a Get accessor. Er verwendet eine Yield Anweisung, um jedes Element der Auflistung zu einem Zeitpunkt zurückzugeben.It uses a Yield statement to return each element of the collection one at a time.

Sie rufen den Iterator mithilfe einer For Each...Next Anweisung.You call an iterator by using a For Each...Next statement. Jede Iteration der For Each-Schleife ruft den Iterator auf.Each iteration of the For Each loop calls the iterator. Wenn eine Yield -Anweisung erreicht wird, in der Iterator, der Ausdruck in der Yield Anweisung zurückgegeben wird, und die aktuelle Position im Code wird beibehalten.When a Yield statement is reached in the iterator, the expression in the Yield statement is returned, and the current location in code is retained. Wenn der Iterator das nächste Mal aufgerufen wird, wird die Ausführung von dieser Position neu gestartet.Execution is restarted from that location the next time that the iterator is called.

Im folgenden Beispiel wird eine Iteratorfunktion.The following example uses an iterator function. Der Iteratorfunktion verfügt über eine Yield -Anweisung, die innerhalb einer für... Nächste Schleife.The iterator function has a Yield statement that's inside a For…Next loop. In der ListEvenNumbers -Methode, jede Iteration der der For Each Anweisungstext erzeugt einen Aufruf der Iteratorfunktion, die zur nächsten geht Yield Anweisung.In the ListEvenNumbers method, each iteration of the For Each statement body creates a call to the iterator function, which proceeds to the next Yield statement.

Public Sub ListEvenNumbers()
    For Each number As Integer In EvenSequence(5, 18)
        Debug.Write(number & " ")
    Next
    Debug.WriteLine("")
    ' Output: 6 8 10 12 14 16 18
End Sub

Private Iterator Function EvenSequence(
ByVal firstNumber As Integer, ByVal lastNumber As Integer) _
As System.Collections.Generic.IEnumerable(Of Integer)

    ' Yield even numbers in the range.
    For number = firstNumber To lastNumber
        If number Mod 2 = 0 Then
            Yield number
        End If
    Next
End Function

Weitere Informationen finden Sie unter Iteratoren, Yield-Anweisung, und Iterator.For more information, see Iterators, Yield Statement, and Iterator.

Technische ImplementierungTechnical Implementation

Wenn eine For Each...NextWhen a For EachNext Anweisung wird ausgeführt, Visual Basic wertet die Auflistung nur einmal, bevor die Schleife gestartet wird.statement runs, Visual Basic evaluates the collection only one time, before the loop starts. Wenn der Anweisungsblock ändert element oder group, diese Änderungen wirken sich nicht auf die Iteration der Schleife.If your statement block changes element or group, these changes don't affect the iteration of the loop.

Wenn alle Elemente in der Auflistung nacheinander zugewiesen wurden, element, For Each -Schleife beendet und die folgende Anweisung wird die Steuerung der Next Anweisung.When all the elements in the collection have been successively assigned to element, the For Each loop stops and control passes to the statement following the Next statement.

Wenn element wurde nicht deklariert wurde außerhalb dieser Schleife deklarieren sie in der For Each Anweisung.If element hasn't been declared outside this loop, you must declare it in the For Each statement. Können Sie den Typ des deklarieren element explizit mithilfe einer As -Anweisung, oder Sie können den Typrückschluss den Typ zugewiesen abhängig.You can declare the type of element explicitly by using an As statement, or you can rely on type inference to assign the type. In beiden Fällen den Bereich der element ist der Text der Schleife.In either case, the scope of element is the body of the loop. Sie können jedoch nicht deklarieren element außerhalb sowohl innerhalb der Schleife.However, you cannot declare element both outside and inside the loop.

Sie können optional angeben, element in der Next Anweisung.You can optionally specify element in the Next statement. Dies verbessert die Lesbarkeit des Programms, insbesondere bei geschachtelten For Each Schleifen.This improves the readability of your program, especially if you have nested For Each loops. Sie müssen dieselbe Variable angeben, wie das Projekt, das in der entsprechenden For Each Anweisung.You must specify the same variable as the one that appears in the corresponding For Each statement.

Möglicherweise möchten Sie zu vermeiden, Ändern des Werts der element innerhalb einer Schleife.You might want to avoid changing the value of element inside a loop. Auf diese Weise kann erschweren zum Lesen und Debuggen Ihres Codes.Doing this can make it more difficult to read and debug your code. Ändern des Werts der group keinen Einfluss auf die Auflistung oder seiner Elemente, die bestimmt wurden, wenn die Schleife zuerst eingegeben wurde.Changing the value of group doesn't affect the collection or its elements, which were determined when the loop was first entered.

Wenn Sie sind Schachteln von Schleifen, wenn eine Next einer äußeren Schachtelungsebene-Anweisung vor der Next einer inneren Ebene signalisiert der Compiler einen Fehler.When you're nesting loops, if a Next statement of an outer nesting level is encountered before the Next of an inner level, the compiler signals an error. Jedoch der Compiler erkennen diese überlappende Fehler bei der Angabe element in jedem Next Anweisung.However, the compiler can detect this overlapping error only if you specify element in every Next statement.

Wenn Code Durchlaufen einer Auflistung in einer bestimmten Reihenfolge, hängt von einer For Each... Next Schleife ist nicht empfehlenswert, es sei denn, Sie wissen, dass die Merkmale der Enumerator-Objekt der Auflistung verfügbar macht.If your code depends on traversing a collection in a particular order, a For Each...Next loop isn't the best choice, unless you know the characteristics of the enumerator object the collection exposes. Die Reihenfolge des Durchlaufs wird nicht durch Visual Basic, bestimmt, sondern durch die MoveNext -Methode des Enumerationsobjekts.The order of traversal isn't determined by Visual Basic, but by the MoveNext method of the enumerator object. Aus diesem Grund Sie möglicherweise nicht um vorherzusagen, welches Element der Auflistung der erste zurückzugebenden ist element, oder die als Nächstes nach einem angegebenen Element zurückgegeben werden.Therefore, you might not be able to predict which element of the collection is the first to be returned in element, or which is the next to be returned after a given element. Erzielen Sie möglicherweise zuverlässiger Ergebnisse, die mit einer anderen Schleifenstruktur wie For... Next oder Do... Loop.You might achieve more reliable results using a different loop structure, such as For...Next or Do...Loop.

Der Datentyp des element sein muss, sodass der Datentyp der Elemente des group können konvertiert werden kann.The data type of element must be such that the data type of the elements of group can be converted to it.

Der Datentyp des group muss ein Verweistyp, der bezieht sich auf eine Auflistung oder ein Array, das aufzählbar ist.The data type of group must be a reference type that refers to a collection or an array that's enumerable. Meist bedeutet dies, dass group bezieht sich auf ein Objekt, implementiert die IEnumerable -Schnittstelle des der System.Collections Namespace oder die IEnumerable<T> Schnittstelle der System.Collections.Generic Namespace.Most commonly this means that group refers to an object that implements the IEnumerable interface of the System.Collections namespace or the IEnumerable<T> interface of the System.Collections.Generic namespace. System.Collections.IEnumerable definiert die GetEnumerator Methode, die ein Enumeratorobjekt für die Auflistung zurückgibt.System.Collections.IEnumerable defines the GetEnumerator method, which returns an enumerator object for the collection. Das Enumeratorobjekt implementiert die System.Collections.IEnumerator -Schnittstelle des der System.Collections Namespace und macht die Current Eigenschaft und die Reset und MoveNext Methoden.The enumerator object implements the System.Collections.IEnumerator interface of the System.Collections namespace and exposes the Current property and the Reset and MoveNext methods. Visual Basic verwendet diese, um die Auflistung zu durchlaufen.Visual Basic uses these to traverse the collection.

EingrenzungskonvertierungenNarrowing Conversions

Wenn Option Strict festgelegt ist, um On, einschränkende Konvertierungen normalerweise Compilerfehlern führen.When Option Strict is set to On, narrowing conversions ordinarily cause compiler errors. In einer For Each -Anweisung jedoch Konvertierungen von den Elementen im group auf element ausgewertet werden und zur Laufzeit ausgeführt wird und Compilerfehler durch einschränkende Konvertierungen werden unterdrückt.In a For Each statement, however, conversions from the elements in group to element are evaluated and performed at run time, and compiler errors caused by narrowing conversions are suppressed.

Im folgenden Beispiel wird die Zuweisung von m als Anfangswert für n wird kompiliert, wenn Option Strict ist auf, da die Konvertierung von einem Long auf ein Integer ist eine einschränkende Konvertierung.In the following example, the assignment of m as the initial value for n doesn't compile when Option Strict is on because the conversion of a Long to an Integer is a narrowing conversion. In der For Each -Anweisung ist jedoch kein Compilerfehler gemeldet, selbst wenn die Zuweisung zu number erfordert die gleiche Konvertierung von Long auf Integer.In the For Each statement, however, no compiler error is reported, even though the assignment to number requires the same conversion from Long to Integer. In der For Each Anweisung, die eine große Anzahl enthält, tritt ein Laufzeitfehler auf Wenn ToInteger auf der großen Anzahl angewendet wird.In the For Each statement that contains a large number, a run-time error occurs when ToInteger is applied to the large number.

Option Strict On

Module Module1
    Sub Main()
        ' The assignment of m to n causes a compiler error when 
        ' Option Strict is on.
        Dim m As Long = 987
        'Dim n As Integer = m

        ' The For Each loop requires the same conversion but
        ' causes no errors, even when Option Strict is on.
        For Each number As Integer In New Long() {45, 3, 987}
            Console.Write(number & " ")
        Next
        Console.WriteLine()
        ' Output: 45 3 987

        ' Here a run-time error is raised because 9876543210
        ' is too large for type Integer.
        'For Each number As Integer In New Long() {45, 3, 9876543210}
        '    Console.Write(number & " ")
        'Next

        Console.ReadKey()
    End Sub
End Module

IEnumerator-AufrufeIEnumerator Calls

Bei der Ausführung einer For Each... Next Schleife beginnt, Visual Basic stellt sicher, dass group bezieht sich auf ein gültiges Auflistungsobjekt.When execution of a For Each...Next loop starts, Visual Basic verifies that group refers to a valid collection object. Wenn dies nicht der Fall ist, wird eine Ausnahme ausgelöst.If not, it throws an exception. Andernfalls ruft der MoveNext Methode und die Current -Eigenschaft des Objekts Enumerator auf das erste Element zurück.Otherwise, it calls the MoveNext method and the Current property of the enumerator object to return the first element. Wenn MoveNext gibt an, dass keine nächste Element, d. h., wenn die Auflistung leer ist, ist die For Each -Schleife beendet und die folgende Anweisung wird die Steuerung der Next Anweisung.If MoveNext indicates that there is no next element, that is, if the collection is empty, the For Each loop stops and control passes to the statement following the Next statement. Andernfalls legt Visual Basic element mit dem ersten Element und führt den Anweisungsblock.Otherwise, Visual Basic sets element to the first element and runs the statement block.

Jedes Mal, wenn Visual Basic stößt der Next -Anweisung, gibt es die For Each Anweisung.Each time Visual Basic encounters the Next statement, it returns to the For Each statement. Erneut aufgerufen MoveNext und Current auf das nächste Element, und wieder zurück entweder der Block ausgeführt oder beendet die Schleife je nach Ergebnis.Again it calls MoveNext and Current to return the next element, and again it either runs the block or stops the loop depending on the result. Dieser Prozess wird fortgesetzt, bis MoveNext gibt an, dass kein weiter Element vorhanden ist oder ein Exit For Anweisung gefunden wird.This process continues until MoveNext indicates that there is no next element or an Exit For statement is encountered.

Ändern der Auflistung.Modifying the Collection. Das Enumeratorobjekt zurückgegebenes GetEnumerator normalerweise nicht können Sie die Auflistung zu ändern, indem Sie hinzufügen, löschen, ersetzen oder Neuordnen von Elementen.The enumerator object returned by GetEnumerator normally doesn't let you change the collection by adding, deleting, replacing, or reordering any elements. Wenn Sie die Auflistung ändern, nachdem Sie initiiert eine For Each... Next Schleife, das Enumeratorobjekt wird ungültig und bewirkt, dass der nächste Versuch, ein Element zuzugreifen ein InvalidOperationException Ausnahme.If you change the collection after you have initiated a For Each...Next loop, the enumerator object becomes invalid, and the next attempt to access an element causes an InvalidOperationException exception.

Jedoch diese Blockierung der Änderung ist nicht bestimmt von Visual Basic sondern durch die Implementierung der IEnumerable Schnittstelle.However, this blocking of modification isn't determined by Visual Basic, but rather by the implementation of the IEnumerable interface. Es ist möglich, implementieren IEnumerable auf eine Weise, die Änderung während der Iteration zulässt.It is possible to implement IEnumerable in a way that allows for modification during iteration. Wenn Sie auf diese Weise solche dynamische Änderung erwägen, stellen Sie sicher, dass Sie wissen, dass die Merkmale der IEnumerable Implementierung für die Auflistung, die Sie verwenden.If you are considering doing such dynamic modification, make sure that you understand the characteristics of the IEnumerable implementation on the collection you are using.

Ändern die Elemente der Auflistung.Modifying Collection Elements. Die Current -Eigenschaft des Enumerationsobjekts ist ReadOnly, und gibt eine lokale Kopie jedes Elements der Auflistung zurück.The Current property of the enumerator object is ReadOnly, and it returns a local copy of each collection element. Dies bedeutet, dass die Elemente selbst zu ändern, kann nicht in einem For Each... Next Schleife.This means that you cannot modify the elements themselves in a For Each...Next loop. Jede Änderung, die Sie vornehmen, wirkt sich auf nur die lokale Kopie von Current und ist nicht in der zugrunde liegenden Auflistung übernommen.Any modification you make affects only the local copy from Current and isn't reflected back into the underlying collection. Allerdings können ein Element ein Verweistyp ist, Sie die Elemente der Instanz ändern, auf denen er zeigt.However, if an element is a reference type, you can modify the members of the instance to which it points. Im folgende Beispiel ändert die BackColor Mitglied aller thisControl Element.The following example modifies the BackColor member of each thisControl element. Sie nicht möglich ist, jedoch ändern, thisControl selbst.You cannot, however, modify thisControl itself.

Sub lightBlueBackground(ByVal thisForm As System.Windows.Forms.Form)  
    For Each thisControl As System.Windows.Forms.Control In thisForm.Controls  
        thisControl.BackColor = System.Drawing.Color.LightBlue  
    Next thisControl  
End Sub  

Im vorherige Beispiel können die BackColor Mitglied aller thisControl Element, jedoch nicht geändert werden kann thisControl selbst.The previous example can modify the BackColor member of each thisControl element, although it cannot modify thisControl itself.

Durchlaufen von Arrays.Traversing Arrays. Da die Array -Klasse implementiert die IEnumerable -Schnittstelle, die alle Arrays verfügbar zu machen die GetEnumerator Methode.Because the Array class implements the IEnumerable interface, all arrays expose the GetEnumerator method. Dies bedeutet, dass Sie ein Array mit durchlaufen können eine For Each... Next Schleife.This means that you can iterate through an array with a For Each...Next loop. Allerdings können Sie die Elemente des Arrays nur lesen.However, you can only read the array elements. Sie können nicht geändert werden.You cannot change them.

BeispielExample

Das folgende Beispiel listet alle Ordner im Verzeichnis C:\ mithilfe der DirectoryInfo Klasse.The following example lists all the folders in the C:\ directory by using the DirectoryInfo class.

Dim dInfo As New System.IO.DirectoryInfo("c:\")
For Each dir As System.IO.DirectoryInfo In dInfo.GetDirectories()
    Debug.WriteLine(dir.Name)
Next

BeispielExample

Das folgende Beispiel zeigt ein Verfahren zum Sortieren einer Auflistung.The following example illustrates a procedure for sorting a collection. Im Beispiel sortiert Instanzen eine Car -Klasse, die im rowsetcache eine List<T>.The example sorts instances of a Car class that are stored in a List<T>. Die Car-Klasse implementiert die IComparable<T>-Schnittstelle, die die Implementierung der CompareTo-Methode erfordert.The Car class implements the IComparable<T> interface, which requires that the CompareTo method be implemented.

Bei jedem Aufruf der CompareTo Methode stellt einen einzelnen Vergleich aus, die für die Sortierung verwendet wird.Each call to the CompareTo method makes a single comparison that's used for sorting. Vom Benutzer erstellter Code in der CompareTo-Methode gibt einen Wert für jeden Vergleich des aktuellen Objekts mit einem anderen Objekt zurück.User-written code in the CompareTo method returns a value for each comparison of the current object with another object. Der zurückgegebene Wert ist kleiner als Null, wenn das aktuelle Objekt kleiner ist als das andere Objekt, größer als Null, wenn das aktuelle Objekt größer als das andere Objekt ist und Null, wenn beide Objekt gleich groß sind.The value returned is less than zero if the current object is less than the other object, greater than zero if the current object is greater than the other object, and zero if they are equal. Dies ermöglicht es Ihnen, in dem Code die Kriterien für größer als, kleiner als und gleich zu definieren.This enables you to define in code the criteria for greater than, less than, and equal.

In der ListCars-Methode sortiert die cars.Sort()-Anweisung die Liste.In the ListCars method, the cars.Sort() statement sorts the list. Dieser Aufruf der Sort-Methode von List<T> führt dazu, dass die CompareTo-Methode für die Car-Objekte in der List automatisch aufgerufen wird.This call to the Sort method of the List<T> causes the CompareTo method to be called automatically for the Car objects in the List.

Public Sub ListCars()

    ' Create some new cars.
    Dim cars As New List(Of Car) From
    {
        New Car With {.Name = "car1", .Color = "blue", .Speed = 20},
        New Car With {.Name = "car2", .Color = "red", .Speed = 50},
        New Car With {.Name = "car3", .Color = "green", .Speed = 10},
        New Car With {.Name = "car4", .Color = "blue", .Speed = 50},
        New Car With {.Name = "car5", .Color = "blue", .Speed = 30},
        New Car With {.Name = "car6", .Color = "red", .Speed = 60},
        New Car With {.Name = "car7", .Color = "green", .Speed = 50}
    }

    ' Sort the cars by color alphabetically, and then by speed
    ' in descending order.
    cars.Sort()

    ' View all of the cars.
    For Each thisCar As Car In cars
        Debug.Write(thisCar.Color.PadRight(5) & " ")
        Debug.Write(thisCar.Speed.ToString & " ")
        Debug.Write(thisCar.Name)
        Debug.WriteLine("")
    Next

    ' Output:
    '  blue  50 car4
    '  blue  30 car5
    '  blue  20 car1
    '  green 50 car7
    '  green 10 car3
    '  red   60 car6
    '  red   50 car2
End Sub

Public Class Car
    Implements IComparable(Of Car)

    Public Property Name As String
    Public Property Speed As Integer
    Public Property Color As String

    Public Function CompareTo(ByVal other As Car) As Integer _
        Implements System.IComparable(Of Car).CompareTo
        ' A call to this method makes a single comparison that is
        ' used for sorting.

        ' Determine the relative order of the objects being compared.
        ' Sort by color alphabetically, and then by speed in
        ' descending order.

        ' Compare the colors.
        Dim compare As Integer
        compare = String.Compare(Me.Color, other.Color, True)

        ' If the colors are the same, compare the speeds.
        If compare = 0 Then
            compare = Me.Speed.CompareTo(other.Speed)

            ' Use descending order for speed.
            compare = -compare
        End If

        Return compare
    End Function
End Class

Siehe auchSee Also

SammlungenCollections
For...Next-AnweisungFor...Next Statement
SchleifenstrukturLoop Structures
While...End While-AnweisungWhile...End While Statement
Do...Loop-AnweisungDo...Loop Statement
Erweiternde und eingrenzende KonvertierungenWidening and Narrowing Conversions
Objektinitialisierer: Benannte und anonyme TypenObject Initializers: Named and Anonymous Types
AuflistungsinitialisiererCollection Initializers
ArraysArrays