นิพจน์แลมบดา (Lambda Expressions) ใน C#
นิพจน์แลมบดาเป็นวิธีเขียนฟังก์ชันแบบไม่มีชื่อ (anonymous function) ให้กระชับ ใช้ตัวดำเนินการ => (อ่านว่า "goes to") แยกพารามิเตอร์ทางซ้ายและนิพจน์/บล็อกโค้ดทางขวา
รูปแบบพื้นฐาน
// นิพจน์เดี่ยว (Expression Lambda)
(parameters) => expression
// บล็อกนิพจน์ (Statement Lambda)
(parameters) => { statements; }
ตัวอย่างการใช้งาน
using System;
using System.Collections.Generic;
class Demo
{
static void Main()
{
List list = new List { 44, 6, 34, 23, 78 };
// หาดัชนีแรกที่ค่ามากกว่า 50
int index = list.FindIndex(x => x > 50);
Console.WriteLine($"Index: {index}"); // Output: 4
// ใช้กับ LINQ
var evenNumbers = list.Where(x => x % 2 == 0);
Console.WriteLine("เลขคู่: " + string.Join(", ", evenNumbers));
// ใช้กับ Delegate
Func add = (a, b) => a + b;
Console.WriteLine($"5 + 3 = {add(5, 3)}");
}
}
ผลลัพธ์
Index: 4
เลขคู่: 44, 6, 34, 78
5 + 3 = 8
รูปแบบต่างๆ ของ Lambda
| รูปแบบ | ตัวอย่าง | คำอธิบาย |
|---|---|---|
| ไม่มีพารามิเตอร์ | () => DateTime.Now | ใช้วงเล็บว่าง |
| พารามิเตอร์เดียว | x => x * 2 | ละวงเล็บได้ |
| หลายพารามิเตอร์ | (x, y) => x + y | ต้องมีวงเล็บ |
| บล็อกโค้ด | x => { return x * 2; } | ต้องมี return เอง |
| พารามิเตอร์ชัดเจน | (int x, int y) => x + y | ระบุชนิดข้อมูลได้ |
การจับตัวแปร (Variable Capture)
int factor = 10;
Func multiply = x => x * factor; // จับตัวแปร factor
factor = 20;
Console.WriteLine(multiply(5)); // Output: 100 (ใช้ค่าใหม่)
ข้อดี: โค้ดกระชับ อ่านง่าย ใช้กับ LINQ, Delegate, Event Handler ได้ดี