Freigeben über


Über_Die_Verwendung_Von_Generischen_Methoden

Kurzbeschreibung

Ein generischer Typ ist eine parametrisierte Typdefinition, die Sie mit konkreten Typargumenten instanziieren (z List<T>. B.), wodurch wiederverwendbarer, typsicherer Code bereitgestellt wird, den der Compiler und die CLR effizient verarbeiten.

Lange Beschreibung

Mit Generics können Sie eine Methode, Klasse, Struktur oder Schnittstelle genau an den Datentyp anpassen, der von ihnen verarbeitet wird. Statt beispielsweise die System.Collections.Hashtable-Klasse zu verwenden, mit der Schlüssel und Werte beliebiger Art zulässig sind, können Sie die generische System.Collections.Generic.Dictionary-Klasse verwenden und die für die Schlüssel - und Werteigenschaften zulässigen Typen angeben. Generische Methoden sorgen für mehr Code-Wiederverwendbarkeit und Typsicherheit.

Bei einigen generischen Methoden ist PowerShell in der Lage, generische Argumente für eine Methode durch Ableitung aus den bereitgestellten Argumenten herauszufinden. Die Methodenauflösung kann jedoch kompliziert sein, wenn eine Methode sowohl generische als auch nicht-generische Überladungen hat oder wenn die generische Methode keinen formalen Parameter benötigt. PowerShell kann ohne die expliziten generischen Methodenargumente die richtige Methode nicht auflösen.

Beispiel: [array]::Empty[T](). Die .NET-Klasse Array hat eine statische, generische Methode Empty[T](), die keine formalen Parameter benötigt.

Vor PowerShell 7.3 mussten Sie komplizierte Workarounds mit .NET Reflection verwenden, um eine korrekte Methodenauflösung zu gewährleisten. Ein Beispiel finden Sie im Blog-Beitrag von Lee Holmes Aufruf generischer Methoden für nicht-generische Klassen in PowerShell.

Ab PowerShell 7.3 können Sie die Typen für eine generische Methode angeben.

Syntax

Eine generische Methode ist eine Methode mit zwei Parameterlisten: eine Liste der generischen Typen und eine Liste der Methodenargumente.

Die folgenden Beispiele zeigen die neue PowerShell-Syntax für den Zugriff auf eine generische Methode:

# static generic methods
[type_name]::MethodName[generic_type_arguments](method_arguments)

# instance generic methods
$object.MethodName[generic_type_arguments](method_arguments)

Die generic_type_arguments kann ein einzelner Typ oder eine kommagetrennte Liste von Typen sein, z. B. [string, int], einschließlich anderer generischer Typen wie $obj.MethodName[string, System.Collections.Generic.Dictionary[string, int]]().

Das method_arguments kann aus null oder mehr Elementen bestehen.

Weitere Informationen finden Sie unter Generics in .NET.

Example

In diesem Beispiel erstellen wir eine Liste von Ganzzahlen und verwenden dann die Klasse System.Linq.Enumerable, um die Werte aufzuzählen und sie in einen neuen Wert zu transformieren.

Die Variable $list ist ein generisches List[T]-Objekt, das nur ganze Zahlen enthalten kann. List[T] ist eine generische Klasse, die Ihnen die Möglichkeit bietet, den Typ ihrer Mitglieder anzugeben, wenn Sie sie erstellen. [System.Linq.Enumerable]::Select[T1,T2](T1,T2) ist eine generische Methode, die zwei generische Typparameter und zwei formale Wertparameter benötigt.

[System.Collections.Generic.List[int]]$list = @( 1, 2, 3, 4, 5 )
$result = [System.Linq.Enumerable]::Select[int, float](
    $list,
    [Func[int, float]]{
        param($Item)
        [Math]::Pow($Item, 3)
    }
)
$result

Die Ausgabe zeigt jeden Wert hochgezählt mit 3 an.

1
8
27
64
125