2011-02-08 52 views
26

Tôi muốn biết sự khác biệt là gì. Hiện tại, tôi đang tìm hiểu công cụ này và dường như với tôi như thế này là giống nhau:Biểu thức Lambda so với các phương thức ẩn danh

delegate void X(); 

X instanceOfX; 

instanceOfX = delegate() { code }; 

instanceOfX =() => { code }; 

Ngoài ra nếu lambda mới hơn, tôi có nên sử dụng lambda và quên các phương pháp ẩn danh không?

+3

Suy nghĩ về mặt tiến hóa của ngôn ngữ. Trong C# 1, chúng tôi đã có các đại biểu. Trong C# 2, họ đã thêm các phương thức nặc danh. C# 3 thêm lambdas. Cách dễ dàng hơn để thực hiện các tác vụ tương tự. Để biết thêm về sự tiến hóa, tôi sẽ khuyến khích bạn xem cuốn sách * C# In Depth *. –

Trả lời

19

Có, biểu thức lambda chỉ là các phương thức vô danh rất đặc biệt.

Tuy nhiên, có một số khác biệt sâu sắc. Bắt đầu với số Lambda Expression vs. Anonymous Methods, Part One của Eric Lippert và tiếp tục với phần còn lại của số series.

+6

Vậy điều gì đặc biệt về chúng? – recursive

+0

Điều gì đặc biệt về chúng lojol

+1

@recursive: Gõ suy luận. – jason

3

Sự khác biệt duy nhất là lambda có thể dễ dàng truyền tới Expression<Func<void>>. Các đại biểu chỉ đơn thuần là phương pháp/đóng cửa, nhưng lambda cũng được chia thành cây biểu thức:

Expression<Func<int, int>> expr = x => x*2; // Expression tree 
Func<int, int> fun = x => x*2;    // function 
delegate int MyDelegate(int x); 
MyDelegate del = x => x*2;    // Same as function, delegate 
+1

Lưu ý rằng điều này chỉ có thể cho một tập hợp con của các lamdas: Biểu thức-lamdas nhưng không phải là lệnh lamdas. – CodesInChaos

+3

Lưu ý rằng "Delegate" là một tên khủng khiếp đối với một loại đại biểu bởi vì nó sẽ dễ dàng bị nhầm lẫn với System.Delegate, lớp cơ sở của nó. –

+3

Tôi xin lỗi. Tôi vẫn đang uống cà phê sáng nay và tôi thành thật không thể nghĩ ra một cái tên khác – kelloti

Các vấn đề liên quan