Tôi có 3 (Chỉnh sửa) loại trừ lẫn nhau IEnumerables mà tôi muốn lặp lại. Tôi muốn làm một cái gì đó như thế này:Foreach qua bộ sưu tập của IEnumerables
IEnumerable<Car> redCars = GetRedCars();
IEnumerable<Car> greenCars = GetGreenCars();
IEnumerable<Car> blueCars = GetBlueCars();
foreach(Car c in (redCars + greenCars + blueCars)) {
c.DoSomething();
}
...
Cách tốt nhất tôi có thể nghĩ đến là:
...
List<Car> allCars = new List();
allCars.AddRange(redCars);
allCars.AddRange(greenCars);
allCars.AddRange(blueCars);
foreach(car in allCars) {
...
}
...
Có cách nào ngắn gọn hơn để làm điều này? Có vẻ như việc kết hợp IEnumberables sẽ không đáng kể.
Heh ... Tôi bắt đầu với Concat và sau đó đã đi đến Liên minh và sau đó quyết định tôi không thể quyết định nên sử dụng, vì vậy tôi đã xóa câu trả lời của tôi. Tôi thích bạn giải thích sự khác biệt tốt hơn anyway. +1 – Randolpho
Chính xác những gì tôi đang tìm kiếm. Cảm ơn! – sdr
@sdr: Lưu ý rằng có sự cân bằng thời gian/không gian tại đây. Giả sử bạn không có ba nhưng hai mươi danh sách như vậy với mười nghìn yếu tố. Phương pháp của bạn (ghép tất cả chúng lại với nhau thành một danh sách lớn) chiếm khoảng 20 x 10K tham chiếu bổ sung và có các hoạt động sao chép tham chiếu 20 x 10K. Làm 20 concve ngây thơ, mặt khác, chiếm không tham khảo thêm, nhưng concested lồng nhau có một gánh nặng sao chép dựa trên chiều sâu của chúng làm tổ, do đó sẽ có 10 x 11 x 10K = 110K bản sao, không phải 20K bản sao. Xem http://blogs.msdn.com/wesdyer/archive/2007/03/23/all-about-iterators.aspx để biết chi tiết. –