Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

นิพจน์แลมบดา (Lambda Expressions) ใน C#

นิพจน์แลมบดา (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 ได้ดี