Operator ekspresi Lambda (=>) mendefinisikan 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;. Anggota void memiliki formulir void 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; atau T this[int i] => expression;. Anda juga dapat menggunakan badan ekspresi untuk masing-masing aksesor. Aksesor get memiliki formulir get => expression;. Atau setinit aksesor memiliki formulir set => statementExpression; atau init => 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 add atau remove memiliki formulir add => statementExpression; atau remove => 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#.

Lihat juga