Cách "tốt nhất" (tính đến cả tốc độ và khả năng đọc) để xác định xem danh sách có trống không? Ngay cả khi danh sách thuộc loại IEnumerable<T>
và không có thuộc tính Count.
Ngay bây giờ tôi đang xoay người giữa điều này:
if (myList.Count() == 0) { ... }
và điều này:
if (!myList.Any()) { ... }
Tôi đoán là tùy chọn thứ hai nhanh hơn, vì nó sẽ trả về kết quả ngay khi nhìn thấy mục đầu tiên, trong khi tùy chọn thứ hai (đối với IEnumerable) sẽ cần phải truy cập vào mọi mục để trả về số lượng.
Điều đó đang được nói, liệu tùy chọn thứ hai có dễ đọc đối với bạn không? Bạn thích cái nào? Hoặc bạn có thể nghĩ ra cách tốt hơn để kiểm tra danh sách trống không?
Phản hồi của Edit @ lassevk có vẻ hợp lý nhất, cùng với một chút kiểm tra thời gian chạy để sử dụng số lượng được lưu trong bộ nhớ cache nếu có thể, như sau:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
list.Any()
tương đương với list.IsEmpty
? Phương pháp khuôn khổ nên được tối ưu hóa - chỉ nên viết một phương pháp mới nếu bạn nhận ra đó là một nút thắt cổ chai hoàn hảo.
IsEmpty
phương thức mở rộng. github.com/dotnet/corefx/issues/35054 Vui lòng kiểm tra và bình chọn nếu bạn thích và đồng ý.
is
vàcast
nhưng việc sử dụngas
vànull
kiểm tra:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;