Cách "tốt nhất" (lấy cả tốc độ và khả năng đọc) là gì để xác định xem danh sách có trống không? Ngay cả khi danh sách là loại IEnumerable<T>
và không có thuộc tính Đếm.Kiểm tra xem danh sách có trống không với LINQ
Ngay bây giờ tôi đang tung tăng giữa này:
if (myList.Count() == 0) { ... }
và điều này:
if (!myList.Any()) { ... }
đoán của tôi là sự lựa chọn thứ hai là nhanh hơn, vì nó sẽ trở lại với một kết quả ngay sau khi nó thấy mục đầu tiên, trong khi tùy chọn thứ hai (cho một IEnumerable) sẽ cần phải truy cập mọi mục để trả về số đếm.
Điều đó đang được nói, tùy chọn thứ hai có thể đọc được không? Bạn thích cái nào? Hoặc bạn có thể nghĩ ra một cách tốt hơn để kiểm tra danh sách trống không?
Sửa @ phản ứng lassevk của có vẻ là hợp lý nhất, cùng với một chút thời gian chạy kiểm tra để sử dụng một số lượng lưu trữ nếu có thể, như thế này:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
Tốt hơn nhiều không trộn 'is' và' cast' nhưng sử dụng 'as' và' null' kiểm tra: 'ICollection collection = list as ICollection ; if (collection! = null) return colllection.Count; ' –
abatishchev
Tại sao viết một phương thức bổ sung? Không phải là 'list.Any()' tương đương với 'list.IsEmpty'? Phương pháp khung phải được tối ưu hóa - bạn chỉ nên viết một phương pháp mới nếu bạn đã tìm ra đó là một nút cổ chai hoàn hảo. – dbkk
Có ai bận tâm để đo lường hiệu suất trên các triển khai được đề xuất của họ hay là mọi người chỉ ném ra các ý tưởng? –