ใช่ความแตกต่างเพียงอย่างเดียวคือความจริงที่ว่ามันคืนค่า
การทำให้เข้าใจง่าย (ไม่ใช้นิพจน์):
List<T>.ForEach
ทำการกระทำโดยไม่คาดหวังผลตอบแทน
ดังนั้นAction<T>
ตัวแทนจะพอเพียง .. พูดว่า:
List<T>.ForEach(param => Console.WriteLine(param));
เหมือนกับการพูดว่า:
List<T>.ForEach(delegate(T param) { Console.WriteLine(param); });
ความแตกต่างคือประเภท param และ decleration ของตัวแทนได้รับการอนุมานจากการใช้งานและไม่จำเป็นต้องใช้เครื่องมือจัดฟันในวิธีการแบบอินไลน์อย่างง่าย
อยู่ที่ไหน
List<T>.Where
รับฟังก์ชั่นโดยคาดหวังผลลัพธ์
ดังนั้นFunction<T, bool>
จะคาดหวัง:
List<T>.Where(param => param.Value == SomeExpectedComparison);
ซึ่งเหมือนกับ:
List<T>.Where(delegate(T param) { return param.Value == SomeExpectedComparison; });
นอกจากนี้คุณยังสามารถประกาศวิธีการเหล่านี้แบบอินไลน์และกำหนดให้กับตัวแปร IE:
Action myAction = () => Console.WriteLine("I'm doing something Nifty!");
myAction();
หรือ
Function<object, string> myFunction = theObject => theObject.ToString();
string myString = myFunction(someObject);
ฉันหวังว่านี่จะช่วยได้.