2012-08-15 36 views
15

Tôi muốn chuyển đổi một ArrayList thành List<string> bằng LINQ. Tôi cố gắng ToList() nhưng cách tiếp cận mà không hoạt động:Chuyển đổi 'ArrayList' thành 'Danh sách <string>' (hoặc 'Danh sách <T>') bằng LINQ

ArrayList resultsObjects = new ArrayList(); 
List<string> results = resultsObjects.ToList<string>(); 
+0

có thể trùng lặp của (http://stackoverflow.com/ câu hỏi/786268/trong-net-how-do-bạn-chuyển đổi-một-arraylist-to-a-mạnh-typed-generic-list-withou) –

Trả lời

23

Mã của bạn thực cho thấy một List<ArrayList> chứ không phải là một đơn ArrayList. Nếu bạn đang thực sự nhận được chỉ là một ArrayList, bạn có thể muốn:

ArrayList resultObjects = ...; 
List<string> results = resultObjects.Cast<string>() 
            .ToList(); 

Cuộc gọi Cast là cần thiết vì ArrayList là yếu gõ - nó chỉ thực hiện IEnumerable, không IEnumerable<T>. Hầu như tất cả các toán tử LINQ trong LINQ to Objects đều dựa trên IEnumerable<T>.

Giả sử các giá trị trong ArrayList thực sự là các chuỗi. Nếu không, bạn sẽ cần cung cấp cho chúng tôi thêm thông tin về cách bạn muốn mỗi mục được chuyển đổi thành chuỗi.

2

Tôi cho rằng dòng đầu tiên của bạn có nghĩa là ArrayList resultsObjects = new ArrayList();.

Nếu các đối tượng bên trong ArrayList là của một loại hình cụ thể, bạn có thể sử dụng phương pháp Cast<Type> mở rộng:

List<string> results = resultsObjects.Cast<string>().ToList(); 

Nếu có đối tượng tùy ý trong ArrayList mà bạn muốn chuyển đổi để chuỗi, bạn có thể sử dụng này:

List<string> results = resultsObjects.Cast<object>().Select(x => x.ToString()) 
                .ToList(); 
0

Bạn có thể chuyển đổi các yếu tố để ArrayListobject[] mảng sử dụng ArrayList.ToArray() metho d.

List<ArrayList> resultsObjects = new List<ArrayList>(); 
resultsObjects.Add(new ArrayList() { 10, "BB", 20 }); 
resultsObjects.Add(new ArrayList() { "PP", "QQ" }); 

var list = (from arList in resultsObjects 
         from sr in arList.ToArray() 
         where sr is string 
         select sr.ToString()).ToList(); 
0

Bạn cũng có thể sử dụng OfType <> Phương pháp LINQ của, tùy thuộc vào việc bạn muốn nâng một ngoại lệ nếu một trong các mục trong ArrayList của bạn không phải là bột nhôm với loại mong muốn. Nếu arrayList của bạn có các đối tượng trong đó không phải là chuỗi, OfType() sẽ bỏ qua chúng.

var oldSchoolArrayList = new ArrayList() { "Me", "You", 1.37m }; 
var strings = oldSchoolArrayList.OfType<string>().ToList(); 
foreach (var s in strings) 
    Console.WriteLine(s); 

Output: [? Trong Net, làm thế nào để bạn chuyển đổi một ArrayList vào một danh sách chung gõ mạnh mà không sử dụng foreach]

Me 
You 
Các vấn đề liên quan