Do lưu ý rằng một cái gì đó sẽ phải liệt kê các mảng danh sách để xây dựng các List<T>
; nó chỉ là vấn đề của việc bạn tự mình làm hay để nó cho một phương pháp khác (khung công tác/tiện ích).
Nếu đây là một một lần, các giải pháp mà bạn muốn tránh (sử dụng một "tại chỗ" foreach
vòng lặp để thực hiện chuyển đổi) là một lựa chọn hoàn toàn hợp lý. Nếu bạn thấy mình làm điều này khá thường xuyên, bạn có thể giải nén nó ra thành một phương pháp tiện ích chung chung, như trong câu trả lời của cdhowie.
Nếu hạn chế của bạn duy nhất là bạn phải mục tiêu .NET 2.0 (nhưng có thể sử dụng C# 3), hãy xem xét LINQBridge, mà là một reimplementation của LINQ to Objects cho .NET 2.0. Điều này sẽ cho phép bạn sử dụng mẫu Cast
bạn đã cung cấp mà không thay đổi. Nó cũng sẽ hoạt động trên C# 2, nhưng bạn sẽ không nhận được lợi ích của cú pháp phương pháp mở rộng, tốt hơn kiểu suy luận, vv.
Nếu bạn không quan tâm đến hiệu suất, bạn cũng không muốn những rắc rối của việc viết một phương pháp hữu ích, bạn có thể sử dụng trong xây dựng ArrayList.ToArray
phương pháp để giúp đỡ, bằng cách tạo ra một mảng trung gian mà chơi tốt với List<T>
(đây không phải là tất cả những gì ngắn hơn một foreach):
ArrayList arrayList = ...
// Create intermediary array
BookingData[] array = (BookingData[]) arrayList.ToArray(typeof(BookingData));
// Create the List<T> using the constructor that takes an IEnumerable<T>
List<BookingData> list = new List<BookingData>(array);
Cuối cùng, tôi sẽ đề nghị, nếu có thể từ bỏ việc sử dụng các bộ sưu tập hoàn toàn không chung chung.
Trong C# bạn thực sự cần phải đưa 'ArrayList' vào' List'? – khachik
@khachik: 'ArrayList' thuộc loại' Object' và 'List' là kiểu generic. – Bobby
@khachik, chúng đều là các lớp cụ thể trong C#. –