4:09 AM -
NET
No comments
Lambda Expressions
Trước tiên, xin nhắc lại về anonymous method:
Giả sử bạn muốn tạo một button để updates một ListBox trên form mỗi khi click lên nó. Trong C# 1.0, bạn sẽ phải làm như sau:
public MyForm()
{
listBox = new ListBox(...);
textBox = new TextBox(...);
addButton = new Button(...);
addButton.Click += new EventHandler(AddClick);
}
void AddClick(object sender, EventArgs e)
{
listBox.Items.Add(textBox.Text);
}
Đến C# 2.0, công việc trông có vẻ đơn giản hơn một chút:
public MyForm()
{
listBox = new ListBox(...);
textBox = new TextBox(...);
addButton = new Button(...);
addButton.Click += delegate
{
listBox.Items.Add(textBox.Text);
};
Như bạn thấy, với việc sử dụng anonymous methods trong C# 2.0, bạn không cần phải khai báo tường minh method của mình và gắn nó vào event như trước. Tuy nhiên, hãy xem lambda expressions trong C# 3.0 làm được những gì:
Parameters to Lambda Expressions
Cú pháp của lambda expression thật sự đơn giản. Bắt đầu với một parameter (hoặc parameter list), theo sau đó là toán tử =>, tiếp theo là 1 expression hoặc block of statement.
Parameters của lambda expressions có thể xác định tường minh (explicitly) và không tường minh (implicitly). Với kiểu tường minh, kiểu của param của mỗi expression sẽ được xác định rõ. Trong kiểu không tường minh, kiểu của param sẽ được suy ra từ ngữ cảnh mà lambda expression diễn ra.
(int x) => x + 1 // explicitly typed parameter
(y,z) => return y * z; // implicitly typed parameter
Lambda Expressions Demonstration
Đoạn code dưới đây mô tả 2 cách thức để in ra các chuỗi có length là một số chẵn. Cách đầu tiên được implement trong hàm AnonMethod, là một anonymous methods.
Cách còn lại, được implement trong LambdaExample, sử dụng lambda expression:
// Program.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Query;
using System.Xml.XLinq;
using System.Data.DLinq;
namespace LambdaExample
{
public delegate bool KeyValueFilter
}
public static class Extensions
{
}
}
0 comments:
Post a Comment