Chỉ biểu thức lambda mà không phương pháp cơ thể có thể được chuyển đổi sang cây biểu
cấu trúc sau làm biên dịch:
Func<int> exp1 =() => 1;
Func<int> exp2 =() => { return 1; };
Func<int> exp3 = delegate { return 1; };
Expression<Func<int>> exp4 =() => 1;
Và sau làm không
Expression<Func<int>> exp5 = delegate { return 1; }; //no anonymous delegates
Expression<Func<int>> exp6 =() => { return 1; }; //or lambdas with block body
Vì vậy, sự khác biệt ngay cả ở cấp độ không cao cấp (Jon Sk eet chỉ ra ở đây sick difference example)
Một điểm khác biệt là bạn có thể tạo đại biểu ẩn danh mà không có danh sách tham số nếu bạn không định sử dụng chúng bên trong thân phương thức, với lambda bạn luôn phải cung cấp tham số.
Sau hai dòng chứng minh sự khác biệt
Func<int, int, int, int, int> anonymous = delegate { return 1; };
Func<int, int, int, int, int> lambda = (param1, param2, param3, param4) => 1;
Bạn làm về cơ bản là giống nhau nhưng đại biểu vô danh trông rõ ràng tốt hơn ở đây.
Nguồn
2011-08-05 01:08:46
+1, nhưng không phải là biểu thức lambda chỉ phát minh lại bánh xe (thay vì kém, vì tôi mặc dù các phương thức ẩn danh có ý nghĩa hơn). –
vì vậy biểu hiện lambada không thể trả lại giá trị? trong khi phương pháp nặc danh có thể? –
SnOrfus: vâng họ làm điều tương tự để bạn nói đúng, đó chỉ là vấn đề sở thích cú pháp.Sasha: cả lambdas và các phương thức nặc danh đều có thể có giá trị trả về. –