Generische Delegaten zum Bearbeiten von Arrays und ListenGeneric Delegates for Manipulating Arrays and Lists

Dieses Thema bietet eine Übersicht über generische Delegate für Konvertierungen, Suchprädikate und Aktionen, die für Elemente eines Arrays oder einer Auflistung ausgeführt werden.This topic provides an overview of generic delegates for conversions, search predicates, and actions to be taken on elements of an array or collection.

Generische Delegaten zum Bearbeiten von Arrays und ListenGeneric Delegates for Manipulating Arrays and Lists

Der generische Action<T>-Delegat stellt eine Methode dar, die eine Aktion für ein Element des angegebenen Typs ausführt.The Action<T> generic delegate represents a method that performs some action on an element of the specified type. Sie können eine Methode erstellen, die die gewünschte Aktion für das Element ausführt, eine Instanz des Action<T>-Delegaten erstellen, die diese Methode darstellt, und dann das Array und den Delegaten an die statische generische Array.ForEach-Methode übergeben.You can create a method that performs the desired action on the element, create an instance of the Action<T> delegate to represent that method, and then pass the array and the delegate to the Array.ForEach static generic method. Die Methode wird für jedes Element des Arrays aufgerufen.The method is called for every element of the array.

Die generische List<T>-Klasse stellt auch eine ForEach-Methode bereit, die den Action<T>-Delegaten verwendet.The List<T> generic class also provides a ForEach method that uses the Action<T> delegate. Diese Methode ist nicht generisch.This method is not generic.

Hinweis

Dies stellt einen interessanten Aspekt generischer Typen und Methoden dar.This makes an interesting point about generic types and methods. Die Array.ForEach-Methode muss statisch (Shared in Visual Basic) und generisch sein, weil Array kein generisches Typ ist. Für Array.ForEach kann nur deshalb ein zu verarbeitender Typ angegeben werden, weil die Methode ihre eigene Typparameterliste hat.The Array.ForEach method must be static (Shared in Visual Basic) and generic because Array is not a generic type; the only reason you can specify a type for Array.ForEach to operate on is that the method has its own type parameter list. Im Gegensatz dazu gehört die nicht generische List<T>.ForEach-Methode zur generischen Klasse List<T> und verwendet daher einfach die Typparameter ihrer Klasse.By contrast, the nongeneric List<T>.ForEach method belongs to the generic class List<T>, so it simply uses the type parameter of its class. Die Klasse ist stark typisiert, daher kann es sich bei der Methode um eine Instanzmethode handeln.The class is strongly typed, so the method can be an instance method.

Der generische Predicate<T>-Delegat stellt eine Methode dar, die bestimmt, ob ein bestimmtes Element von Ihnen definierte Kriterien erfüllt.The Predicate<T> generic delegate represents a method that determines whether a particular element meets criteria you define. Sie können ihn mit den folgenden statischen generischen Methoden von Array dazu verwenden, nach einem Element oder einer Reihe von Elementen zu suchen: Exists, Find, FindAll, FindIndex, FindLast, FindLastIndex und TrueForAll.You can use it with the following static generic methods of Array to search for an element or a set of elements: Exists, Find, FindAll, FindIndex, FindLast, FindLastIndex, and TrueForAll.

Predicate<T> kann auch mit den entsprechenden nicht generischen Instanzmethoden der generischen List<T>-Klasse verwendet werden.Predicate<T> also works with the corresponding nongeneric instance methods of the List<T> generic class.

Der generische Comparison<T>-Delegat ermöglicht es Ihnen, eine Sortierreihenfolge für Array- oder Listenelemente anzugeben, die keine systemeigene Sortierreihenfolge haben, oder die systemeigene Sortierreihenfolge zu überschreiben.The Comparison<T> generic delegate allows you to provide a sort order for array or list elements that do not have a native sort order, or to override the native sort order. Erstellen Sie eine Methode, die den Vergleich ausführt, sowie eine Instanz des Comparison<T>-Delegaten, um die Methode darzustellen, und übergeben Sie dann das Array und den Delegaten an die statische generische Methode Array.Sort<T>(T[], Comparison<T>).Create a method that performs the comparison, create an instance of the Comparison<T> delegate to represent your method, and then pass the array and the delegate to the Array.Sort<T>(T[], Comparison<T>) static generic method. Die generische List<T>-Klasse stellt eine entsprechende Instanzmethodenüberladung bereit: List<T>.Sort(Comparison<T>).The List<T> generic class provides a corresponding instance method overload, List<T>.Sort(Comparison<T>).

Der generische Converter<TInput,TOutput>-Delegat ermöglicht es Ihnen, eine Konvertierung zwischen zwei Typen zu definieren und ein Array aus einem Typ in ein Array eines anderen Typs zu konvertieren oder eine Liste eines Typs in eine Liste eines anderen Typs zu konvertieren.The Converter<TInput,TOutput> generic delegate allows you to define a conversion between two types, and to convert an array of one type into an array of the other, or to convert a list of one type to a list of the other. Erstellen Sie eine Methode, die die Elemente der vorhandenen Liste in einen neuen Typ konvertiert, erstellen Sie eine Delegatinstanz, die die Methode darstellt, und verwenden Sie die generische statische Array.ConvertAll-Methode, um ein Array des neuen Typs aus dem ursprünglichen Array zu erstellen, oder die generische List<T>.ConvertAll<TOutput>(Converter<T,TOutput>)-Instanzmethode, um eine Liste des neuen Typs aus der ursprünglichen Liste zu erstellen.Create a method that converts the elements of the existing list to a new type, create a delegate instance to represent the method, and use the Array.ConvertAll generic static method to produce an array of the new type from the original array, or the List<T>.ConvertAll<TOutput>(Converter<T,TOutput>) generic instance method to produce a list of the new type from the original list.

Verketten von DelegatenChaining Delegates

Viele der Methoden, die diese Delegaten verwenden, geben ein Array oder eine Liste zurück, das oder die an eine andere Methode übergeben werden kann.Many of the methods that use these delegates return an array or list, which can be passed to another method. Wenn Sie beispielsweise bestimmte Elemente eines Arrays auswählen, diese Elemente in einen neuen Typ konvertieren und sie in einem neuen Array speichern möchten, können Sie das Array, das von der generischen FindAll-Methode zurückgegeben wird, an die generische ConvertAll-Methode übergeben.For example, if you want to select certain elements of an array, convert those elements to a new type, and save them in a new array, you can pass the array returned by the FindAll generic method to the ConvertAll generic method. Wenn der neue Elementtyp keine natürliche Sortierreihenfolge hat, können Sie das von der generischen der ConvertAll-Methode zurückgegebene Array an die generische Sort<T>(T[], Comparison<T>)-Methode übergeben.If the new element type lacks a natural sort order, you can pass the array returned by the ConvertAll generic method to the Sort<T>(T[], Comparison<T>) generic method.

Weitere InformationenSee also