Làm cách nào để chuyển đổi danh sách thành chuỗi trong C #?
Khi tôi thực thi toString
trên một đối tượng List, tôi nhận được:
System.Collections.Generic.List`1 [System.String]
Làm cách nào để chuyển đổi danh sách thành chuỗi trong C #?
Khi tôi thực thi toString
trên một đối tượng List, tôi nhận được:
System.Collections.Generic.List`1 [System.String]
Câu trả lời:
Có lẽ bạn đang cố gắng làm
string combindedString = string.Join( ",", myList.ToArray() );
Bạn có thể thay thế "," bằng những gì bạn muốn chia các phần tử trong danh sách.
Chỉnh sửa : Như đã đề cập trong các ý kiến bạn cũng có thể làm
string combindedString = string.Join( ",", myList);
Tài liệu tham khảo:
Join<T>(String, IEnumerable<T>)
Concatenates the members of a collection, using the specified separator between each member.
Bạn có thể sử dụng string.Join
:
List<string> list = new List<string>()
{
"Red",
"Blue",
"Green"
};
string output = string.Join(Environment.NewLine, list.ToArray());
Console.Write(output);
Kết quả sẽ là:
Red
Blue
Green
Thay thế cho Environment.NewLine
, bạn có thể thay thế nó bằng một dấu phân cách dòng dựa trên chuỗi bạn chọn.
Nếu bạn muốn một cái gì đó phức tạp hơn một chút so với tham gia đơn giản, bạn có thể sử dụng LINQ, vd
var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");
Sẽ lấy ["A", "B", "C"] và tạo ra "(a) (b) (c)"
String.Join(" ", myList)
hoặc String.Join(" ", myList.ToArray())
. Đối số đầu tiên là dấu phân cách giữa các chuỗi con.
var myList = new List<String> { "foo","bar","baz"};
Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"
Tùy thuộc vào phiên bản .NET của bạn, trước tiên bạn có thể cần sử dụng ToArray () trong danh sách ..
Bạn có một List<string>
- vì vậy nếu bạn muốn chúng được nối, một cái gì đó như
string s = string.Join("", list);
sẽ hoạt động (trong .NET 4.0 ít nhất). Tham số đầu tiên là dấu phân cách. Vì vậy, bạn cũng có thể dấu phẩy, vv
Bạn cũng có thể muốn xem xét việc sử dụng StringBuilder để thực hiện chạy ghép, thay vì tạo một danh sách.
Các .ToString()
phương pháp với nhiều loại tài liệu tham khảo thường giải quyết trở lại System.Object.ToString()
trừ khi bạn ghi đè lên nó trong một loại hình xuất phát (có thể sử dụng phương pháp khuyến nông cho các built-in loại). Hành vi mặc định cho phương thức này là xuất tên của loại mà nó được gọi. Vì vậy, những gì bạn đang thấy là hành vi dự kiến.
Bạn có thể thử một cái gì đó như string.Join(", ", myList.ToArray());
để đạt được điều này. Đó là một bước bổ sung, nhưng nó có thể được đưa vào một phương thức mở rộng System.Collections.Generic.List<T>
để làm cho nó dễ dàng hơn một chút. Một cái gì đó như thế này:
public static class GenericListExtensions
{
public static string ToString<T>(this IList<T> list)
{
return string.Join(", ", list);
}
}
(Lưu ý rằng đây là mã tự do và chưa được kiểm tra. Tôi không có trình biên dịch tiện dụng vào lúc này. Vì vậy, bạn sẽ muốn thử nghiệm nó một chút.)
Thật khó để nói, nhưng có lẽ bạn đang tìm kiếm một cái gì đó như:
var myString = String.Join(String.Empty, myList.ToArray());
Điều này sẽ ngầm gọi phương thức ToString () trên mỗi mục trong danh sách và nối chúng.
String.Concat()
sẽ đạt được điều tương tự tốt hơn.
Nếu bạn đang muốn biến các mục trong danh sách thành một chuỗi dài lớn, hãy làm điều này : String.Join("", myList)
. Một số phiên bản cũ hơn của khung không cho phép bạn vượt qua IEnumerable làm tham số thứ hai, vì vậy bạn có thể cần phải chuyển đổi danh sách của mình thành một mảng bằng cách gọi .ToArray ().
Câu trả lời trực tiếp cho câu hỏi của bạn là String.Join
như những người khác đã đề cập.
Tuy nhiên, nếu bạn cần một số thao tác, bạn có thể sử dụng Aggregate
:
List<string> employees = new List<string>();
employees.Add("e1");
employees.Add("e2");
employees.Add("e3");
string employeesString = "'" + employees.Aggregate((x, y) => x + "','" + y) + "'";
Console.WriteLine(employeesString);
Console.ReadLine();
Phương pháp này đã giúp tôi khi cố gắng truy xuất dữ liệu từ Tệp văn bản và lưu trữ nó trong Mảng sau đó Gán nó vào một chuỗi có sẵn.
string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");
string marRes = string.Join(Environment.NewLine, lines.ToArray());
Hy vọng có thể giúp được ai đó !!!!
tất cả các câu trả lời ở trên KHÔNG hoạt động cho các danh sách lồng nhau.