2009-02-26 40 views
18

tôi đã dán một số mã từ Jon Skeet C# Trong trang web Depth:() có nghĩa là gì trong biểu thức lambda khi sử dụng Tác vụ?

static void Main() 
{ 
    // First build a list of actions 
    List<Action> actions = new List<Action>(); 
    for (int counter = 0; counter < 10; counter++) 
    { 
     actions.Add(() => Console.WriteLine(counter)); 
    } 

    // Then execute them 
    foreach (Action action in actions) 
    { 
     action(); 
    } 
} 

http://csharpindepth.com/Articles/Chapter5/Closures.aspx

Thông báo dòng:

actions.Add (()

Gì() nghĩa là bên trong dấu ngoặc đơn?

Tôi đã thấy một số ví dụ về biểu thức lambda, các đại biểu, việc sử dụng Đối tượng hành động, vv nhưng tôi đã thấy không có lời giải thích nào về cú pháp này. Nó làm gì? Tại sao nó lại cần thiết?

Trả lời

31

Đây là cách viết tắt để khai báo một biểu thức lambda không có đối số.

() => 42; // Takes no arguments returns 42 
x => 42; // Takes 1 argument and returns 42 
(x) => 42; // Identical to above 
+0

lỗi tô sáng cú pháp dang – Will

+0

@Khi cảm ơn, tôi làm việc quá nhiều ngôn ngữ hàng ngày – JaredPar

+2

'()' Bắt buộc khi bạn cần khối lượng nhiều hơn một tham số: '(x, y) => x * y' – istepaniuk

5

Đó là biểu thức lambda không có tham số.

1

Nó biểu thị chức năng ẩn danh mà không có tham số.

2

Từ MSDN. Một biểu thức lambda có dạng (input) => expression. Vì vậy, một lambda như() => biểu thức biểu thị không có tham số đầu vào. Chữ ký cho hành động không có tham số

2

Dòng này là thêm hành động ẩn danh vào danh sách bằng cách sử dụng biểu thức lambda, không có tham số (đó là lý do tại sao() có) và không trả về gì, do thực tế là nó chỉ in giá trị thực tế của bộ đếm.

3

Tôi nghĩ về lambas như thế này:

(x) => {return x * 2; }

Nhưng chỉ này là rất quan trọng:

(x) => {return x * 2; }

Chúng ta cần => để biết rằng đó là một lambda thay vì đúc, và do đó chúng ta có được điều này:

x => x * 2

(xin lỗi vì đã không định dạng mã như mã, đó là bởi vì bạn không thể làm mọi thứ được in đậm ..)

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