Generische Delegaten zum Bearbeiten von Arrays und Listen
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.
Generische Delegaten zum Bearbeiten von Arrays und Listen
Der generische Action<T>-Delegat stellt eine Methode dar, die eine Aktion für ein Element des angegebenen Typs ausführt. 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. Die Methode wird für jedes Element des Arrays aufgerufen.
Die generische List<T>-Klasse stellt auch eine ForEach-Methode bereit, die den Action<T>-Delegaten verwendet. Diese Methode ist nicht generisch.
Hinweis
Dies stellt einen interessanten Aspekt generischer Typen und Methoden dar. 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. 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. Die Klasse ist stark typisiert, daher kann es sich bei der Methode um eine Instanzmethode handeln.
Der generische Predicate<T>-Delegat stellt eine Methode dar, die bestimmt, ob ein bestimmtes Element von Ihnen definierte Kriterien erfüllt. 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.
Predicate<T> kann auch mit den entsprechenden nicht generischen Instanzmethoden der generischen List<T>-Klasse verwendet werden.
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. 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>). Die generische List<T>-Klasse stellt eine entsprechende Instanzmethodenüberladung bereit: 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. 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.
Verketten von Delegaten
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. 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. 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.