มารู้จักกับ Predicate, Action และ Func ใน C#

เกริ่นนำ

Predicate<>,  Func<>และ Action<> ก็คือ delegate ในรูปแบบ หรือ signature method รูปทั่วไป เพื่อให้แสดง syntax ที่สั้นกระชับขึ้น โดยจะใช้ lambda expressions เป็นรูปแบบในการแสดง delegate

Predicate<> คือ method ที่ return boolean จากการตรวสอบเงื่อนไข ใช้ในการ Fillter ข้อมูล

Func<> คือ method ที่รับ input เข้าไป และ คืนผลออกมาค่าหนึ่ง รูปแบบ Func<In1, In2, … , Out1>

Action<> คือ method ที่ input แต่ไม่ return อะไรออกมาเลย หรือ return void

ตัว compiler จะไม่แสดง Predicate<T> ครับแต่มันจะแสดงเป็น Func<input T, output bool> ซึ่งเขาจะเรียก Func หน้าตาแบบนี้ว่า predicate

ทดลองทำ

var numberList = Enumerable.Range(1, 1000);//สร้าง Number [1, 2, …, 1000]

Func<int, bool> checkEvent = n => n % 2 == 0;//checkEvent คือ Predicate หรือ Func รับค่า int และ คืนค่า bool แสดง delegate ด้วย lambda expressions n => n % 2 == 0
var eventList = numberList.Where(checkEvent);//เรียก method Where ที่รับ predicate function checkEvent

Action<int> report = n => Console.WriteLine(“Report: ” + n);//Action
Console.WriteLine(“Event List: “);
eventList.ToList().ForEach(report);

… run เพื่อดูผลลัพย์ครับ …

แถมให้อีกหน่อยลอง loop action แบบ parallel ดู

eventList.AsParallel().ForAll(report);

… run แล้วลองเทียบผลลัพย์ กับผลลัพย์ด้านบนดูครับ มันจะแตกต่างกันมั้ย?…

ขอบคุณครับ

Advertisements

#net, #c