2009-10-28 34 views
5

Gần đây tôi đã hỏi một câu hỏi ở đây, và ai đó cung cấp câu trả lời này:Ký hiệu "=>" làm gì sau phương thức của tôi trong mã C# này?

private void button1_Click(object sender, EventArgs e) 
{ 
    var client = new WebClient(); 
    Uri X = new Uri("http://www.google.com"); 

    client.DownloadStringCompleted += (s, args) => //THIS, WHAT IS IT DOING? 
    { 
     if (args.Error == null && !args.Cancelled) 
     { 
      MessageBox.Show(); 
     } 
    }; 

    client.DownloadStringAsync(X); 
} 

là gì đó => làm gì? Đây là lần đầu tiên tôi thấy điều này.

+0

Toán tử Lambda. Theo những gì tôi đã đọc, nó được phát âm là "đi tới" khi nói to (như một lưu ý phụ). –

+1

http://msdn.microsoft.com/en-us/library/bb397687.aspx để biết thêm thông tin .... –

Trả lời

10

Về cơ bản nó nói "Tôi cho bạn (s,b) này" và bạn đang quay trở lại tôi s*b hoặc một cái gì đó và nếu bạn đang sử dụng lambda với các biểu thức, nhưng nó có thể là một cái gì như thế này: Tôi cho bạn (s,b) này và làm điều gì đó với chúng trong khối tuyên bố như:

{ 
    int k = a+b; 
    k = Math.Blah(k); 
    return k; 
} 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~

Biểu thức Lambda là một phương thức chưa được đặt tên được viết thay cho phiên bản ủy nhiệm. Trình biên dịch ngay lập tức chuyển đổi biểu thức lambda để một trong hai:

  • Một thể hiện ủy nhiệm
  • Một biểu Tree

delegate int Transformer(int i);

class Test{ 
    static void Main(){ 
    Transformer square = x => x*x; 
    Console.WriteLine(square(3)); 
    } 

} 

Chúng ta có thể viết lại nó như thế này:

delegate int Transformer(int i);

class Test{ 
    static void Main(){ 
    Transformer square = Square; 
    Console.WriteLine(square(3)); 
    } 
    static int Square (int x) {return x*x;} 
} 

Một biểu thức lambda có dạng sau:

(parameters) => expression or statement-block

Trong ví dụ trước đó đã có một tham số duy nhất, x, và biểu thức là x*x

trong ví dụ của chúng tôi, x tương ứng tham số i, và biểu thức x*x tương ứng với kiểu trả về int, do đó tương thích với đại biểu Biến áp; đang

delegate int Transformer (int i);

Một biểu thức lambda có thể là một khối tuyên bố thay vì một biểu thức. Chúng tôi có thể viết lại ví dụ của chúng tôi như sau:

x => {return x*x;} 

Một cây biểu thị, thuộc loại Expression<T>, biểu thị mã bên trong biểu thức lamda trong mô hình đối tượng đi ngang.Điều này cho phép biểu thức lambda được thể hiện sau này trong thời gian chạy (Vui lòng kiểm tra "Biểu thức truy vấn" cho LINQ)

19

Đó là toán tử lambda. Bạn định nghĩa một hàm ẩn danh lấy hai đối số (s, args) (loại bỏ các specifier), và phần thân của hàm đã nói là những gì xuất hiện sau ký hiệu =>.

Đó là khái niệm tương tự như thế này:

... 
client.DownloadStringCompleted += Foo; 
} 

void Foo(object sender, EventArgs args) 
{ 
    if (args.Error == null && !args.Cancelled) 
    { 
     MessageBox.Show(); 
    } 
}; 
6

Các => là Lambda Operator. Đó là một chàng trai nhỏ tiện dụng có thể giúp làm cho mã của bạn dễ đọc hơn và ít lộn xộn hơn.

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