2012-05-04 58 views
5

Tôi đã đọc Kéo công tắc here và đi qua mã này.() => {} có nghĩa là gì?

Ai đó có thể vui lòng giải thích () => {} là gì và tôi nên đọc gì để hiểu được dòng mã đó?

var moveMap = new Dictionary<string, Action>() 
{ 
    {"Up", MoveUp}, 
    {"Down", MoveDown}, 
    {"Left", MoveLeft}, 
    {"Right", MoveRight}, 
    {"Combo",() => { MoveUp(); MoveUp(); MoveDown(); MoveDown(); }} 
}; 

moveMap[move](); 
+0

Đây là biểu thức Lambda, hãy xem [MSDN] (http://msdn.microsoft.com/en-us/library/bb397687.aspx) để biết thêm thông tin. – MatthiasG

Trả lời

9

Đó là một lambda expression:

Tất cả các biểu thức lambda sử dụng toán tử lambda =>, được đọc là "đi vào". Phía bên trái của toán tử lambda chỉ định các tham số đầu vào (nếu có) và phía bên phải giữ biểu thức hoặc khối câu lệnh

Về cơ bản bạn đang xây dựng một hàm tạm thời mới ở đây chỉ cần kết hợp hai trong số cac chưc năng khac.

Như đã thấy ở trên, () ở phía bên trái có nghĩa là nó có danh sách tham số trống (giống như các chức năng khác của bạn). {} ở bên phải có nghĩa là nó thực hiện một số câu lệnh bên trong một khối, làm cho nó là một "lambda tuyên bố" được gọi cho các tác dụng phụ của nó, trái ngược với "lambda biểu hiện", tính giá trị.

+3

Nếu nó không phải là vô danh, nó không phải là một lambda. Chỉ cần nói. – tdammers

+0

@tdammers: Hehe, bạn có một điểm ở đó. –

+0

Đã chỉnh sửa - nó không thực sự gọi 4 chức năng khác, thay vì 2 trong số chúng hai lần ... –

4

Đây là lambda expression. MSDN đề cập đến nó như là một "tuyên bố lambda":

Một tuyên bố lambda tương tự như một biểu thức lambda ngoại trừ các tuyên bố được đính kèm trong niềng răng.

Từ điển có chứa một bộ Actions (đại biểu). 4 được xác định rõ ràng và thứ 5 là một hàm ẩn danh gọi 2 trong số những người khác. Dòng cuối cùng của mã gọi một hành động (nó lấy đại biểu từ điển từ khóa và gọi nó).

4

() => {/*code*/} là biểu thức lambda , một cách thuận tiện để tạo đại biểu ẩn danh có 0 tham số. Về cơ bản nó tạo ra một đoạn mã có thể gọi được trong trường hợp của bạn di chuyển lên hai lần và sau đó di chuyển xuống hai lần.

Bạn không giới hạn lambdas không có tham số - bạn có thể tạo những người có lập luận:

Action<string> callable = (name) => {Console.WriteLine("Hello, {0}!", s);}; 
callable("world"); 
callable("quick brown fox"); 
3

() đây là chức năng ẩn danh với Không thông số

=> là toán tử lambda (phát âm như Goes to)

Từ điển đã được khởi tạo bằng KeyValuePair, Tùy chọn cuối cùng là một chức năng ẩn danh không có tham số và gọi các chức năng khác