LINQ #1: Toán tử OfType, Cast dùng để làm gì

OfType và Cast được sinh ra cho cùng mục đích chuyển những loại collection cũ của .NET sang loại IEnumerable. Mục đích của việc chuyển đổi này giúp cho các collection đó có thể gọi được những Standard Query Operator
1. Dùng Cast để chuyển những collection cũ của .NET sang IEnumerable

ArrayList arrayList = new ArrayList();
arrayList.Add("Goc");
arrayList.Add("Kinh");
arrayList.Add("Nghiem"); 

IEnumerable names = arrayList.Cast().Where(n => n.Length < 4);
foreach(string name in names)
	Console.WriteLine(name);

Kết quả sẽ in ra chữ Goc
2. Dùng OfType để chuyển những collection cũ của .NET sang IEnumerable

ArrayList arrayList = new ArrayList();
arrayList.Add("Goc");
arrayList.Add("Kinh");
arrayList.Add("Nghiem");

IEnumerable names = arrayList.OfType().Where(n => n.Length < 4);
foreach(string name in names)
  Console.WriteLine(name);

Kết quả sẽ in ra chữ Goc

3. Sự khác nhau giữ Cast và OfType
Mặc dù cả hai sinh ra để làm cùng một công việc nhưng anh Cast thì khó tính hơn anh OfType.

Anh Cast yêu cầu các đối tượng trong collection của chúng ta phải là kiểu chính xác. Như ví dụ bên trên, chỉ cần một đối tượng của chúng ta không phải là chuỗi, thì exception sẽ được bung ra ngay

Ngược lại, anh OfType thì dễ chịu với chúng ta hơn. Anh OfType sẽ đưa những đối tượng nào đúng kiểu được anh qui định vào IEnumerable, còn những anh nào không đúng kiểu sẽ bỏ qua, không có exception nào bung ra


Leave a Reply

Your email address will not be published. Required fields are marked *