Vài điều về IEnumerable, ICollection, IList, IQueryable trong C#

Vài điều về IEnumerable, ICollection, IList, IQueryable trong C#

January 16, 2025 0 By Nam Vu

Hôm trước nói khi so sánh IEnumerable và IQueryable làm việc với Linq và EF core, có anh em phản biện khá hay khi nếu xét bên ngoài collection và không cho lấy EF làm ví dụ thì sao?

Đây là bài viết không liên quan đến Linq và EF core mà đem ra bàn cân nhé.

Trong C# khi làm việc với array, chúng ta thấy được những hạn chế của nó là phải có size, phải viết các functional count, insert, delete,….

Bởi thế , C# đẻ ra một số interface phục vụ như IEnumerable, ICollection, IList, IQueryable . Tất cả đều thuộc về name space System.Collections. Vậy chúng là gì , khi nào sử dụng và hiệu qủa của từng interface ra sao?

Quan sát hình bên dưới và chi tiết sẽ được đề cập bên dưới:

1.IEnumerable :

Một list hay contatiner giữ các item . Nhưng không thể chỉnh sửa các item như thêm , xoá , sửa , đếm …. . Chỉ hỗ trợ filter .

2.ICollection :

Một dạng collection size động , được lấy từ IEnumerable và mở rộng một số functional như thêm , xoá , sửa , đếm . Sử dụng khi làm việc với list động , không biết số phần tử , cần một số functional như thêm xoá , sửa , đếm .

3.IList :

Một dạng mở rộng của ICollection . Thực hiện bao gồm IEnumerable và ICollection , cùng một functional khác như thêm và xoá item ở giữa list . Có thể sử dụng loop như foreach hay for . Sử dụng giống với ICollection , nhưng khác ở chỗ cần thao thác với các item đã biết vị trí trong list .

4.IQueryable :

Một dạng mở rộng của ICollection . dùng để làm việc với Linq to SQL . Thay vì sinh ra Func<T, bool> như những đàn anh ở trên , IQueryable sinh ra biểu thức tree và biểu thức dạng <Func<T, bool>>. Sử dụng để thao tác với SQL , như viết LINQ. Cái này được đề cập ở bài viết trước

#ntechdevelopers