我如何在c#中转换一个列表到字符串?
当我在List对象上执行toString时,我得到:
toString
System.Collections.Generic.List ' 1 system . string] [
我将跟随我的直觉,并假设你想将调用ToString的结果连接到列表的每个元素上。
ToString
var result = string.Join(",", list.ToArray());
如果你想将列表中的项转换为一个大的长字符串,请执行String.Join("", myList)。一些旧版本的框架不允许你传递IEnumerable作为第二个参数,所以你可能需要通过调用. toarray()将列表转换为数组。
String.Join("", myList)
也许你正在尝试
string combinedString = string.Join( ",", myList.ToArray() );
你可以替换","用你想要分割列表中的元素。
编辑:正如在评论中提到的,你也可以这样做
string combinedString = string.Join( ",", myList);
参考:
Join<T>(String, IEnumerable<T>) Concatenates the members of a collection, using the specified separator between each member.
这很难说,但也许你想要的是:
var myString = String.Join(String.Empty, myList.ToArray());
这将隐式地对列表中的每个项调用ToString()方法并将它们连接起来。
引用类型的.ToString()方法通常解析回System.Object.ToString(),除非你在派生类型中重写它(可能使用内置类型的扩展方法)。此方法的默认行为是输出调用它的类型的名称。所以你看到的是预期行为。
.ToString()
System.Object.ToString()
你可以尝试像string.Join(", ", myList.ToArray());这样的东西来实现这一点。这是一个额外的步骤,但它可以放在System.Collections.Generic.List<T>的扩展方法中,使它更容易一些。就像这样:
string.Join(", ", myList.ToArray());
System.Collections.Generic.List<T>
public static class GenericListExtensions { public static string ToString<T>(this IList<T> list) { return string.Join(", ", list); } }
(请注意,这是未经测试的免费代码。目前我手头没有编译器。所以你会想要尝试一下。)
你有一个List<string> -所以如果你想把它们连接起来,就像
List<string>
string s = string.Join("", list);
可以工作(至少在。net 4.0中)。第一个参数是分隔符。你也可以用逗号分隔等等。
您可能还希望使用StringBuilder来运行连接,而不是形成一个列表。
如果你想要一些比简单的连接稍微复杂一点的东西,你可以使用LINQ。
var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");
将采用["A", "B", "C"]并产生"(A)(B)(C)"
String.Join(" ", myList)或String.Join(" ", myList.ToArray())。第一个参数是子字符串之间的分隔符。
String.Join(" ", myList)
String.Join(" ", myList.ToArray())
var myList = new List<String> { "foo","bar","baz"}; Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"
根据你的.NET版本,你可能需要先在列表中使用ToArray()。
你可以使用string.Join:
string.Join
List<string> list = new List<string>() { "Red", "Blue", "Green" }; string output = string.Join(Environment.NewLine, list.ToArray()); Console.Write(output);
结果将是:
Red Blue Green
作为Environment.NewLine的替代方法,你可以用你选择的基于字符串的行分隔符替换它。
Environment.NewLine
你的问题的直接答案是String.Join,正如其他人所提到的。
String.Join
然而,如果你需要一些操作,你可以使用Aggregate:
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();
当我试图从文本文件中检索数据并将其存储在数组中,然后将其分配给一个字符串变量时,这种方法帮助了我。
string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt"); string marRes = string.Join(Environment.NewLine, lines.ToArray());
希望可以帮助某人!!!!
这似乎对我有用。
var combindedString = new string(list.ToArray());
如果你的列表有字段/属性,你想使用一个特定的值(例如FirstName),那么你可以这样做:
string combindedString = string.Join( ",", myList.Select(t=>t.FirstName).ToArray() );
string strs="111,222,333" string.Join(",",strs.Split(',').ToList().Select(x=>x.PadLeft(6,'0')).ToArray());
输出
000111,000222,000333