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. Optional Klicken Sie 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 ist 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 einen Sammlungstyp oder ein Objekt ist.A variable with a type that's a collection type or Object. Verweist 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 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, wenn Sie eine Steuerelementvariablen jeder Iteration einer Schleife zugeordnet und der Variablen des ursprünglichen und finalen bestimmt 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 nicht unbedingt wissen, wie viele Elemente, die die Auflistung enthält.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 solchen Fällen 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.

Geschachtelte SchleifenNested Loops

Sie können schachteln For Each Schleifen durch eine Schleife in einem anderen platzieren.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 sind.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 zu schachteln, foreach-Schleife müssen einen eindeutigen 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 fortsetzen fürExit For and Continue For

Die beenden für 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 die folgende Anweisung die 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 mit der 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 der Verwendung in geschachtelten For Each Schleifen Exit For führt zum Beenden der innersten Schleife und überträgt-Steuerelements auf der nächsthöheren Ebene Schachtelungsebenen.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 werden, 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:

  • So durchlaufen Sie den Vorgang fortsetzen, ist nicht erforderlich oder unmöglich ist.Continuing to iterate is unnecessary or impossible. Dies könnte 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, wird eine Schleife, die eine lange 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 eine solche Bedingung erkennen, können Sie Exit For die Schleife mit Escapezeichen versehen.If you detect such a condition, you can use Exit For to escape the loop. Weitere Informationen finden Sie unter tun... Until...Loop-Anweisung.For more information, see Do...Loop Statement.

IteratorsIterators

Sie verwenden eine Iterator um 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 sein 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 einen 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 im Iterator, der Ausdruck in erreicht wird die Yield Anweisung zurückgegeben, 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. Die 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, die jeder Iteration der der For Each Anweisungstext erzeugt einen Aufruf der Iteratorfunktion, der auf die nächste übergeht 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 ausgeführt wird, 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 Ihre 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 zugewiesen wurden element, For Each -Schleife beendet und die Steuerung an die Anweisung nach übergeben die 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, müssen Sie 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. Sie können deklarieren, dass den Typ des element explizit durch Verwenden einer As -Anweisung, oder Sie können sich verlassen, auf den Typrückschluss den Typ zugewiesen.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 sowohl außerhalb und innerhalb der Schleife.However, you cannot declare element both outside and inside the loop.

Sie können optional angeben element in die Next Anweisung.You can optionally specify element in the Next statement. Dies verbessert die Lesbarkeit des Programms, besonders 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 diejenige, die 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 zu lesen und Debuggen Ihres Codes.Doing this can make it more difficult to read and debug your code. Ändern des Werts der group hat keine Auswirkungen auf die Auflistung oder die 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.

Sie sind bei Schleifen geschachtelt, wenn eine Next einer äußeren Schachtelungsebene-Anweisung vor der Next der 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. Allerdings kann der Compiler erkennen diese überlappende Fehler aus, nur dann, wenn Sie angeben, element in jeder Next Anweisung.However, the compiler can detect this overlapping error only if you specify element in every Next statement.

Wenn Ihr Code Durchlaufen einer Auflistung in einer bestimmten Reihenfolge, hängt von einer For Each... Next Schleife ist nicht die beste Wahl, 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 von Visual Basic, bestimmt, sondern von der MoveNext Methode des Enumeratorobjekts.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 ersten zurückzugebenden ist element, oder die als Nächstes nach einem angegebenen Element zurückgegeben wird.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 mithilfe von einer anderen Schleife, wie z. B. 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 muss zulassen, dass 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 handelt, das 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. Meistens bedeutet dies, dass group bezieht sich auf ein Objekt, das implementiert die IEnumerable Schnittstelle die System.Collections Namespace oder die IEnumerable<T> Schnittstelle die 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. Enumerator-Objekt implementiert die System.Collections.IEnumerator Schnittstelle die 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 der Auflistung zu durchlaufen.Visual Basic uses these to traverse the collection.

EingrenzungskonvertierungenNarrowing Conversions

Wenn Option Strict nastaven NA hodnotu On, einschränkende Konvertierungen normalerweise dazu führen, dass Compiler-Fehler.When Option Strict is set to On, narrowing conversions ordinarily cause compiler errors. In einem For Each -Anweisung jedoch Konvertierungen aus den Elementen in group zu element werden ausgewertet und zur Laufzeit ausgeführt und Compiler-Fehler zurückzuführen, dass 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 ist die Zuweisung von m als Anfangswert für n nicht kompiliert, wenn Option Strict ist auf, da die Konvertierung von einer Long auf eine 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, auch wenn die Zuweisung zu number muss die gleiche Konvertierung von Long zu 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, die ein Laufzeitfehler tritt auf, wenn ToInteger auf die große 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, sie löst eine Ausnahme aus.If not, it throws an exception. Andernfalls ruft sie die MoveNext Methode und die Current Eigenschaft des Enumeratorobjekts auf das erste Element zurückzugeben.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 Steuerung an die Anweisung nach übergeben die 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 wird zurückgegeben, um die For Each Anweisung.Each time Visual Basic encounters the Next statement, it returns to the For Each statement. Es ruft MoveNext und Current das nächste Element, und es 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.This process continues until MoveNext indicates that there is no next element or an Exit For statement is encountered.

Ändern die Auflistung ein.Modifying the Collection. Das Enumeratorobjekt, das von zurückgegebene GetEnumerator normalerweise keine können Sie in der 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 Enumerator-Objekt ungültig und bewirkt, dass der nächste Versuch Zugriffs auf ein Element 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 von 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 Sie IEnumerable auf eine Weise, die für die Änderung während der Iteration ermöglicht.It is possible to implement IEnumerable in a way that allows for modification during iteration. Wenn Sie erwägen, diese dynamische Änderung durchführen, stellen Sie sicher, dass Sie verstehen, dass die Merkmale der IEnumerable Implementierung für die Sammlung, 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 Auflistungselemente.Modifying Collection Elements. Die Current -Eigenschaft des Enumeratorobjekts ist ReadOnly, und es gibt eine lokale Kopie der einzelnen Elemente 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 Sie die Elemente selbst ändern, können 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 verweist.However, if an element is a reference type, you can modify the members of the instance to which it points. Das folgende Beispiel ändert die BackColor Mitglied aller thisControl Element.The following example modifies the BackColor member of each thisControl element. Nicht möglich ist, Sie 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 der BackColor Mitglied aller thisControl -Element, obwohl es nicht ändern 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. Sie können jedoch nur die Elemente des Arrays 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:\ mit 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 werden Instanzen von sortiert 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.

Jeder Aufruf der CompareTo Methode macht 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