Hôm nay, một đồng nghiệp đã hỏi tôi cách thêm một phạm vi vào một bộ sưu tập. Anh ta có một lớp kế thừa từ Collection<T>
. Có một thuộc tính chỉ nhận của loại đó đã chứa một số mục. Anh ta muốn thêm các mục trong bộ sưu tập khác vào bộ sưu tập tài sản. Làm thế nào anh ta có thể làm như vậy theo cách thân thiện với C # 3? (Lưu ý ràng buộc về thuộc tính chỉ nhận, điều này ngăn cản các giải pháp như thực hiện Union và chỉ định lại.)
Chắc chắn, một bước trước với Tài sản. Thêm sẽ hoạt động. Nhưng List<T>
AddRange kiểu sẽ thanh lịch hơn nhiều.
Thật dễ dàng để viết một phương thức mở rộng:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Nhưng tôi có cảm giác mình đang phát minh lại bánh xe. Tôi không tìm thấy bất kỳ điều gì tương tự trong System.Linq
hoặc morelinq .
Thiết kế tồi? Chỉ cần gọi Thêm? Thiếu rõ ràng?
ICollection<T>
dường như không có Add
phương pháp. msdn.microsoft.com/en-us/library/… Tuy nhiên Collection<T>
có một.
Add(T item)
từ đầu? Có vẻ như một cách tiếp cận nửa vời để cung cấp khả năng thêm một mục và sau đó mong đợi tất cả người gọi lặp lại để thêm nhiều mục cùng một lúc. Câu nói của bạn chắc chắn đúng IEnumerable<T>
nhưng tôi đã thấy mình thất vọng ICollections
hơn một lần. Tôi không đồng ý với bạn, chỉ là trút giận.