Lamda Expression trong C# 3.0

Sự thay đổi lớn của phiên bản C# từ 2.0 lên 3.0 là anonymous method (giúp bạn có thể tạo được các hàm in-line nhanh gọn không cân phải tao những hàm riêng lẻ không cần thiết). Nay với Lamda Expression, bạn có thể viết chương trình nhanh gọn hơn nữa với tóan tữ lamda (=>) Nó đặc biệt phù hợp với việc tương tác với cơ sở dữ liệu (Database) giúp việc code giờ nhẹ nhàng hơn rất nhiều.

* Đây là cách đề sử dụng Lamda Expression:

Đầu tiên với một mảng số nguyên:

lkNumber = new int[] {9, 1, 6, 3, 5, 7, 2, 1, 0, 4 };

và một hàm để thể hiện số nguyên này:

public void DisplayNum(int i)
{
Func<int, String> SoThanhChuoi = n => n.ToString() + “\r\n”;
txtThongBao.Text += SoThanhChuoi(i);
}

Trong chương trình, có chứa Func một lệnh in-line mới.

1. Xuất dữ liệu:

* Cách sử dụng delegate với mảng số nguyên:

Array.ForEach(lkNumber, delegate(int i)
{
DisplayNum(i);
});

=> Kết quả sẽ hiện lên màn hình là từng số nguyên được xuống dòng (“\r\n”). Đây là cách viết ngắn hơn so với việc dùng vòng foreach rồi mới gọi lệnh nếu các lệnh dài.

* Cách sử dụng lamda expression:

Array.ForEach(lkNumber, i => DisplayNum(i));

=> Code giờ đây chỉ bao gồm 1 dòng duy nhất nhanh chóng và gọn gàn với lamda expression.

2. Sắp xếp trong mảng:

* Cách sử dụng delegate:

Array.Sort(lkNumber, delegate(int x, int y)
{
return x.CompareTo(y);
});

=> Sắp xếp sử dụng với delegate

* Cách sử dụng Lamda Expression:

Array.Sort(lkNumber, (x, y) => x.CompareTo(y));

3. Kiểm tra điều kiện của một mảng:

* Cách sử dụng delegate:

bool b = Array.TrueForAll(lkNumber, delegate(int i){
return i < 10;
});

=> Dùng chương trình

* Cách sử dụng Lamda Expression:

bool a = Array.TrueForAll(lkNumber, i => i < 10);

=> Cách sử dụng với Lamda Expression khiến cho chương trình ngắn và gọn hơn rất nhiều lần.

* Delegate Func<…> trong C# mới:

1. Định nghĩa:

Func là một tính năng mới đi kèm với Lamda Expression trong C#
Đây chính là một dạng delegate mới gọn gàng, linh hoạt và tiện dụng hơn nhiều so với việc viết một function theo đúng mẫu.
Cấu trúc của nó như sau:

Func<T, T, T, …, TResult>

Trong đó T là kiểu biến tham số cần truyền vào
TResult là kiểu dữ liệu được trả vể của Func đó
Việc sử dụng Func cũng vô cùng bình thường như những func khác.

2. Những ví dụ về Func:
* Func lấy độ dài của chuỗi:
Func<String, int> lkLayDoDaiChuoi = x => x.Length;

* Func tính tích của 2 int:
Func<int, int, float> lkMultiple = (x, y) => x *y;
* Func tính tổng của 2 int
Func<int, int, int> lkSum = (x, y) => x + y;

* Func trả về max của một số
Func<int, int, int> lkMax = (x, y) => x > y ? x : y;

* Func kết hơp với LINQ để kiểm tra một phần tử có nằm trong một list hay không:

Func<string, bool> KiemTraTrongArray = n => lkList.Any(x => x.MaSo == n);

* Source Code chương trình demo cho những kiến thức trên:

– Mediafire: http://www.mediafire.com/download/zbk1zulamubnj44/LabLamdaExpression.rar

Tagged: , , , , , , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: