Generische Delegaten zum Bearbeiten von Arrays und Listen

Dieses Thema bietet eine Übersicht über generische Delegaten für Konvertierungen, Suchprädikate und Aktionen, die für Elemente eines Arrays oder einer Auflistung ausgeführt werden können.

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, der diese Methode darstellt, und dann das Array und den Delegaten an die statische generische Array.ForEach<T>-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. Dies ist keine generische Methode.

HinweisHinweis

Dies stellt einen interessanten Aspekt generischer Typen und Methoden dar.Die Array.ForEach<T>-Methode muss statisch (Shared in Visual Basic) und generisch sein, weil Array kein generischer Typ ist. Für Array.ForEach<T> kann nur deswegen ein zu verwendender Typ angegeben werden, weil die Methode ihre eigene Typparameterliste besitzt.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. Er kann mit den folgenden statischen generischen Methoden von Array zum Suchen nach einem Element oder einer Reihe von Elementen verwendet werden: Exists<T>, Find<T>, FindAll<T>, FindIndex, FindLast<T>, FindLastIndex und TrueForAll<T>.

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 besitzen, 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 Array.Sort<T>(T[], Comparison<T>)-Methode. Die generische List<T>-Klasse stellt eine entsprechende Instanzmethodenüberladung mit dem Namen List<T>.Sort(Comparison<T>) bereit.

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<TInput, TOutput>-Methode, um ein Array des neuen Typs aus dem ursprünglichen Array zu erstellen, oder die generische List<T>.ConvertAll<TOutput>-Instanzmethode, um eine Liste der neuen Typen 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, die an eine andere Methode übergeben werden können. Wenn Sie beispielsweise bestimmte Elemente eines Arrays auswählen möchten, konvertieren Sie diese Elemente in einen neuen Typ, und speichern Sie sie in einem neuen Array. Das von der generischen FindAll<T>-Methode zurückgegebene Array übergeben Sie an die generische ConvertAll<TInput, TOutput>-Methode. Wenn der neue Elementtyp keine natürliche Sortierreihenfolge besitzt, können Sie das von der generischen ConvertAll<TInput, TOutput>-Methode zurückgegebene Array an die generische Sort<T>(T[], Comparison<T>)-Methode übergeben.

Siehe auch

Referenz

System.Collections.Generic

System.Collections.ObjectModel

Konzepte

Generische Auflistungen in .NET Framework

Generische Schnittstellen

Vorteile und Einschränkungen von Generika

Kovarianz und Kontravarianz in Generika

Weitere Ressourcen

Generika in .NET Framework