นิพจน์แลมบ์ดาเป็นไวยากรณ์ที่ง่ายขึ้นสำหรับผู้ได้รับมอบหมายที่ไม่ระบุชื่อและสามารถใช้ได้ทุกที่ที่ผู้ใช้ที่ไม่ระบุชื่อสามารถใช้งานได้ อย่างไรก็ตามสิ่งที่ตรงกันข้ามนั้นไม่เป็นความจริง การแสดงออกแลมบ์ดาสามารถแปลงเป็นต้นไม้แสดงผลซึ่งช่วยให้เวทมนตร์จำนวนมากเช่น LINQ เป็น SQL
ต่อไปนี้เป็นตัวอย่างของการแสดงออกของLINQ to Objectsโดยใช้ผู้ได้รับมอบหมายนิรนามจากนั้นแลมบ์ดานิพจน์เพื่อแสดงให้เห็นว่าตาของพวกเขาง่ายขึ้นเพียงใด:
// anonymous delegate
var evens = Enumerable
.Range(1, 100)
.Where(delegate(int x) { return (x % 2) == 0; })
.ToList();
// lambda expression
var evens = Enumerable
.Range(1, 100)
.Where(x => (x % 2) == 0)
.ToList();
นิพจน์แลมบ์ดาและผู้ได้รับมอบหมายนิรนามมีข้อได้เปรียบเหนือการเขียนฟังก์ชั่นแยกต่างหาก: พวกมันใช้การปิดที่สามารถอนุญาตให้คุณส่งสถานะท้องถิ่นไปยังฟังก์ชั่นได้โดยไม่ต้องเพิ่มพารามิเตอร์ให้กับฟังก์ชันหรือสร้างวัตถุแบบใช้ครั้งเดียว
ต้นไม้ Expressionเป็นคุณลักษณะใหม่ที่ทรงพลังมากของ C # 3.0 ที่อนุญาตให้ API ดูโครงสร้างของนิพจน์แทนที่จะได้รับการอ้างอิงถึงวิธีการที่สามารถดำเนินการได้ API เพียงแค่สร้างพารามิเตอร์ผู้รับมอบสิทธิ์ให้เป็นExpression<T>
พารามิเตอร์และคอมไพเลอร์จะสร้างทรีนิพจน์จากแลมบ์ดาแทนที่จะเป็นตัวแทนที่ไม่ระบุชื่อ:
void Example(Predicate<int> aDelegate);
เรียกว่า:
Example(x => x > 5);
กลายเป็น:
void Example(Expression<Predicate<int>> expressionTree);
หลังจะได้รับผ่านการเป็นตัวแทนของที่ต้นไม้ไวยากรณ์นามธรรมx > 5
ที่อธิบายถึงการแสดงออก LINQ ไปยัง SQL อาศัยลักษณะการทำงานนี้เพื่อให้สามารถเปลี่ยนนิพจน์ C # ในนิพจน์ SQL ที่ต้องการสำหรับการกรอง / การสั่งซื้อ / ฯลฯ ในฝั่งเซิร์ฟเวอร์
delegate
อยู่ใน C # ฉันขอแนะนำให้อ่านก่อนที่จะอ่านส่วนที่เหลือของหน้านี้: stackoverflow.com/questions/2082615/ …