2009-01-26 44 views
54

Có cách nào để chuyển đổi số List(of Object) thành số List(of String) trong C# hoặc vb.net mà không cần lặp qua tất cả các mục không? (Đằng sau những cảnh lặp là tốt - Tôi chỉ muốn mã ngắn gọn)Danh sách Chuyển đổi (của đối tượng) thành Danh sách (chuỗi)

Cập nhật: Cách tốt nhất có lẽ là chỉ để làm một mới chọn

myList.Select(function(i) i.ToString()) 

hoặc

myList.Select(i => i.ToString()); 

Trả lời

60

Không có thể mà không cần lặp lại để tạo danh sách mới. Bạn có thể bọc danh sách trong một container thực hiện IList.

Bạn có thể sử dụng LINQ để có được một phiên bản đánh giá lười biếng của IEnumerable<string> từ một danh sách đối tượng như thế này:

var stringList = myList.OfType<string>(); 
+13

Thay vì OfType (lọc danh sách) sử dụng Chọn (i => i.ToString()) –

+1

@geoff: Phụ thuộc vào những gì bạn đang tìm kiếm. Nếu một phần tử là null, i.ToString sẽ thất bại. Bạn cũng có thể xem xét Cast (); –

+0

@MehrdadAfshari: Bất kể xử lý null, OfType() sẽ lọc ra các mục không phải là chuỗi - nó sẽ không cố gắng truyền hoặc gọi ToString(), chúng sẽ bị lọc ra. Đó không phải là những gì được yêu cầu. –

3

Không - nếu bạn muốn chuyển đổi ALL yếu tố của một danh sách, bạn sẽ phải chạm vào TẤT CẢ các phần tử của danh sách đó theo cách này hay cách khác.

Bạn có thể chỉ định/ghi lặp lại theo nhiều cách khác nhau (foreach() ...... hoặc .ConvertAll() hoặc bất kỳ thứ gì), nhưng cuối cùng, theo cách này hay cách khác, một số mã sẽ lặp lại trên từng phần tử và chuyển đổi nó.

Marc

20

Nếu bạn muốn kiểm soát nhiều hơn như thế nào việc chuyển đổi diễn ra, bạn có thể sử dụng ConvertAll:

var stringList = myList.ConvertAll(obj => obj.SomeToStringMethod()); 
+0

Có, KHÔNG, nhưng đằng sau hậu trường. – kenny

8

Bạn có nghĩa là một cái gì đó như thế này?

List<object> objects = new List<object>(); 
var strings = (from o in objects 
       select o.ToString()).ToList(); 
+0

Chỉ cần làm điều này: Danh sách strings = (từ o trong đối tượng chọn o.ToString()). ToList(); –

+1

Tôi đã cập nhật để thêm cuộc gọi ToList (khá hiển nhiên). – ctacke

+1

Tôi cần chuyển đổi danh sách đối tượng người dùng (ứng dụng) thành Danh sách cho trường hợp sử dụng di chuyển môi trường. Một sự thích nghi nhỏ của phương pháp này làm việc rất tốt cho tôi.'var userIDsSource = (từ r trong MigrationSession.UsersSource chọn r.UserID) .ToList();' – Developer63

1

Bạn có thể thực hiện chuyển đổi chuỗi trong khi Danh sách (đối tượng) đang được xây dựng không? Đây sẽ là cách duy nhất để tránh liệt kê toàn bộ danh sách sau khi Danh sách (của đối tượng) được tạo ra.

22

Tính năng này phù hợp với mọi loại.

List<object> objects = new List<object>(); 
List<string> strings = objects.Select(s => (string)s).ToList(); 
Các vấn đề liên quan