about_Calling_Generic_Methods

Generik memungkinkan Anda menyesuaikan metode, kelas, struktur, atau antarmuka hingga jenis data spesifik yang ditindaklanjuti. Misalnya, alih-alih menggunakan Hashtable kelas , yang memungkinkan kunci dan nilai dari jenis apa pun, Anda dapat menggunakan Dictionary<TKey,TValue> kelas generik dan menentukan jenis yang diizinkan untuk properti kunci dan nilai . Generik memberikan peningkatan kegunaan ulang kode dan keamanan jenis.

Untuk beberapa metode generik, PowerShell dapat mencari tahu argumen generik untuk metode dengan menyimpulkan dari argumen yang disediakan. Namun, resolusi metode dapat menjadi rumit ketika metode memiliki kelebihan umum dan non-generik, atau ketika metode generik tidak mengambil parameter formal. PowerShell dapat gagal menyelesaikan metode yang benar tanpa argumen metode generik eksplisit.

Contohnya,[Array]::Empty<T>(). Kelas .NET Array memiliki metode Empty<T>() generik statis yang tidak mengambil parameter formal.

Sebelum PowerShell 7.3, untuk memastikan resolusi metode yang tepat, Anda harus menggunakan solusi yang rumit menggunakan refleksi .NET. Misalnya, lihat posting blog Lee Holmes Memanggil metode generik pada kelas non-generik di PowerShell.

Dimulai dengan PowerShell 7.3, Anda dapat menentukan jenis untuk metode generik.

Sintaks

Metode generik adalah metode dengan dua daftar parameter: daftar jenis generik dan daftar argumen metode.

Contoh berikut menunjukkan sintaks PowerShell baru untuk mengakses metode generik:

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

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

generic_type_arguments dapat berupa satu jenis atau daftar jenis yang dipisahkan koma, seperti [string, int], termasuk jenis generik lainnya seperti$obj.MethodName[string, System.Collections.Generic.Dictionary[string, int]]()

Bisa method_arguments nol atau lebih item.

Untuk informasi selengkapnya, lihat Generik dalam .NET.

Contoh

Dalam contoh ini, kami membuat daftar bilangan bulat lalu menggunakan System.Linq.Enumerable kelas untuk menghitung nilai dan mengubahnya menjadi nilai baru.

Variabel $list adalah objek generik List<T> yang hanya dapat berisi bilangan bulat. List<T> adalah kelas generik yang memungkinkan Anda menentukan jenis anggotanya saat Anda membuatnya. [System.Linq.Enumerable]::Select<T1,T2>(T1,T2) adalah metode generik yang memerlukan dua parameter jenis generik dan dua parameter nilai formal.

[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

Output menunjukkan setiap nilai yang dinaikkan ke daya 3.

1
8
27
64
125