88

Bạn có thể bỏ một List<int>đến một List<string>cách nào đó?

Tôi biết tôi có thể lặp qua và .ToString () điều đó, nhưng một diễn viên sẽ rất tuyệt vời.

Tôi đang ở C # 2.0 (vì vậy không có LINQ ).

|
147

.NET 2.0 có ConvertAllphương thức mà bạn có thể vượt qua trong một hàm chuyển đổi:

List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });
|
107

Cập nhật cho năm 2010

List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());
|
  • 1

    Cảm ơn! Điều này giúp tôi tiết kiệm rất nhiều thời gian

    – Tạ Minh Thu 19:52:10 25/10/2010
  • 1

    Biểu thức ở đó sẽ không hoạt động trong .NET 2.0 chứ?

    – mai thu 22:30:44 27/02/2012
  • 1

    Không, lambdas đã được giới thiệu trong C # 3.0 nên điều này sẽ không hoạt động trong 2.0.

    – Hoàng Thanh Vinh 17:08:10 28/02/2012
  • 1

    Tôi thấy rằng nó hoạt động với VS2008 và .NET 2.0, miễn là bạn đã cài đặt ít nhất .NET 3.0. xem stackoverflow.com/questions/3341846/ từ

    – Hồ Trang Anh 14:26:06 15/10/2014
  • 1

    Mọi người nên phân biệt giữa phiên bản .NET và phiên bản C #. Vì mũi tên x => x.ToString()được biên dịch theo cùng loại IL như delegate(int x) { return x.ToString(); }trong trường hợp này, điều quan trọng là phải có trình biên dịch C # (phiên bản C #) để biết nó =>. Khung và thời gian chạy (phiên bản .NET) không cần tính năng đặc biệt nào cho việc này, vì vậy .NET 2.0 vẫn ổn ở đây.

    – Vũ Bá Cường 20:38:47 13/02/2015
8

C # 2.0 có thể làm được List<T>.Convertkhông? Nếu vậy, tôi nghĩ rằng dự đoán tốt nhất của bạn sẽ là sử dụng điều đó với một đại biểu:

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });

Một cái gì đó dọc theo những dòng.


Câu trả lời của Upvote Glenn, có lẽ là mã chính xác ;-)

|
5

Bạn có thể dùng:

List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();
|
5

Bạn sẽ không thể truyền trực tiếp nó vì không có cast rõ ràng hoặc ẩn nào tồn tại từ int đến chuỗi, nó sẽ phải là một phương thức liên quan đến .ToString () như: -

foreach (int i in intList) stringList.Add(i.ToString());

Chỉnh sửa - hoặc như những người khác đã chỉ ra khá xuất sắc, hãy sử dụng intList.ConvertAll (ủy nhiệm (int i) {return i.ToString ();});, tuy nhiên rõ ràng bạn vẫn phải sử dụng .ToString () và đó là một chuyển đổi thay vì một diễn viên.

|
  • 1

    Sự tồn tại của một dàn diễn viên giữa các loại chung không liên quan gì đến khả năng phân vai giữa các phép chiếu. IE, ngay cả khi intđược chuyển đổi hoàn toàn hoặc rõ ràng thành string, điều đó không có nghĩa là List<int>có chuyển đổi ngầm định hoặc rõ ràng List<string>.

    – Tạ Minh Thu 20:29:03 22/01/2010
1

result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()

thay thế kết quả tham số và listOfInt thành tham số của bạn

|
1

Bạn phải xây dựng một danh sách mới. Các đại diện bit cơ bản của List<int>List<string>hoàn toàn không tương thích - ví dụ, trên nền tảng 64 bit, các thành viên riêng lẻ thậm chí không có cùng kích thước.

Về mặt lý thuyết có thể coi List<string>là một List<object>- điều này đưa bạn vào thế giới thú vị của hiệp phương sai và chống đối, và hiện không được C # hoặc VB.NET hỗ trợ.

|
  • 1

    @Curt :> Về mặt lý thuyết có thể coi> Danh sách <chuỗi> là Danh sách <đối tượng> -> điều này đưa bạn vào thế giới thú vị> của hiệp phương sai và chống đối, và> hiện không được C # hoặc> VB hỗ trợ. NET C # và .NET thực sự hỗ trợ Hiệp phương sai. Chỉ là không phải với thuốc generic.

    – Phan Điền Lâm 23:57:45 04/09/2008

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.