Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Operator ekspresi Lambda (
Token => didukung dalam dua bentuk: sebagai operator lambda dan sebagai pemisah nama anggota dan implementasi anggota dalam definisi isi ekspresi.
Referensi bahasa C# mendokumentasikan versi bahasa C# yang paling baru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.
Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.
Petunjuk / Saran
Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.
Operator Lambda
Dalam ekspresi lambda, operator => lambda memisahkan parameter input di sisi kiri dari bodi lambda di sisi kanan.
Contoh berikut menggunakan fitur LINQ dengan sintaks metode untuk menunjukkan penggunaan ekspresi lambda:
string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
.Where(w => w.StartsWith("a"))
.Min(w => w.Length);
Console.WriteLine(minimalLength); // output: 5
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (interim, next) => interim * next);
Console.WriteLine(product); // output: 280
Parameter input dari ekspresi lambda di-tipkan secara kuat pada waktu kompilasi. Ketika pengkompilasi menyimpulkan jenis parameter input, seperti dalam contoh sebelumnya, Anda dapat menghilangkan deklarasi jenis. Jika Anda perlu menentukan jenis parameter input, Anda harus menentukan jenis untuk setiap parameter, seperti yang ditunjukkan contoh berikut:
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product); // output: 280
Contoh berikut menunjukkan cara menentukan ekspresi lambda tanpa parameter input:
Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());
Untuk informasi selengkapnya, lihat Ekspresi Lambda.
Definisi tubuh ekspresi
Definisi isi ekspresi menggunakan sintaks umum berikut:
member => expression;
Untuk anggota yang mengembalikan nilai, hasil ekspresi harus dikonversi secara implisit ke jenis pengembalian anggota.
void Untuk anggota, konstruktor, finalizer, atau set, init, add, atau remove aksesor, isi harus berupa ekspresi pernyataan. Ekspresi pernyataan dapat berupa penugasan, pemanggilan metode, pembuatan objek, peningkatan atau operasi penurunan, atau await ekspresi. Hasilnya, jika ada, dibuang.
Contoh berikut menunjukkan definisi isi ekspresi untuk Person.ToString metode:
public override string ToString() => $"{fname} {lname}".Trim();
Ini adalah versi singkat dari definisi metode berikut:
public override string ToString()
{
return $"{fname} {lname}".Trim();
}
Anda dapat menggunakan definisi isi ekspresi untuk anggota berikut:
-
Metode dan fungsi lokal: Anggota yang mengembalikan nilai memiliki formulir
T M() => expression;. Anggotavoidmemiliki formulirvoid M() => statementExpression;. Untuk informasi selengkapnya, lihat Metode dan Fungsi lokal. -
Operator: Operator memiliki formulir
public static T operator +(T left, T right) => expression;. Untuk informasi selengkapnya, lihat Kelebihan beban operator. -
Properti dan pengindeks: Properti baca-saja atau pengindeks memiliki formulir
T P => expression;atauT this[int i] => expression;. Anda juga dapat menggunakan badan ekspresi untuk masing-masing aksesor. Aksesorgetmemiliki formulirget => expression;. Atausetinitaksesor memiliki formulirset => statementExpression;atauinit => statementExpression;. Untuk informasi selengkapnya, lihat Properti dan Pengindeks. -
Konstruktor dan finalizer: Anggota ini memiliki formulir
C() => statementExpression;atau~C() => statementExpression;. Untuk informasi selengkapnya, lihat Konstruktor dan Finalizer. -
Aksesor peristiwa: Aksesor
addatauremovememiliki formuliradd => statementExpression;atauremove => statementExpression;. Untuk informasi selengkapnya, lihat Peristiwa.
Kelebihan beban operator
Anda tidak dapat membebani operator secara => berlebihan.
Spesifikasi bahasa C#
Untuk informasi selengkapnya tentang operator lambda, lihat bagian Ekspresi fungsi anonim dari spesifikasi bahasa C#.