在C#中将所有列表内容连接成一个string
如何连接C#中的一个string中的所有内容的列表?
search这个:
List<string> list = new List<string>(); // { "This ", "is ", "your ", "string!"}; list.Add("This "); list.Add("is "); list.Add("your "); list.Add("string!"); string concat = String.Join(" ", list.ToArray());
您可以使用聚合函数来连接列表的所有项目。
以下是以逗号“,”连接列表的所有项目的示例
string s = list.Aggregate((i, j) => i + "," + j).ToString();
如果您在join时需要转换列表元素,则可以使用LINQ :
string.Join(", ", mylist.Select(z => MyMethod(z)));
例:
IEnumerable<string> mylist = new List<string>() {"my", "cool", "list"}; string joined = string.Join(", ", mylist.Select(z => MyMethod(z))); public string MyMethod(string arg) { return arg.ToUpper(); }
这里有一个StringBuilder的简单解决scheme:
var sb = new StringBuilder(); strings.ForEach(s => sb.Append(s)); var combinedList = sb.ToString();
像这样的东西:
List<String> myStrings = new List<string>() { "string1", "string2", "string3" }; StringBuilder concatenatedString = new StringBuilder(); foreach (String myString in myStrings) { concatenatedString.Append(myString); } Console.WriteLine(concatenatedString.ToString());
这是一个使用两个使用LINQ实现的空间分隔元素的版本:
var s = list.Aggregate(new StringBuilder(), (sb, current) => sb.AppendFormat("{0} ", current)).ToString();
Aggregate
方法将StringBuilder
(作为sb
)与列表的当前元素(作为current
)一起传递给lambdaexpression式,该lambdaexpression式可以执行任何所需的操作 – 例如将当前string从列表中附加到StringBuilder
使用lambdaexpression式体
public static string ToString<T>(this IEnumerable<T> source, string delimiter) { string d = String.Empty; var result = new StringBuilder(); foreach(T item in source) { result.Append(d).Append(item.ToString()); d = delimiter; } return result.ToString(); }
还有一个可选的更好的string转换个别值的重载:
public static string ToString<T>(this IEnumerable<T> source, string delimiter, Func<T, string> toString) { string d = String.Empty; var result = new StringBuilder(); foreach(T item in source) { result.Append(d).Append(toString(item)); d = delimiter; } return result.ToString(); }
尝试这个:
request.AllFacilityId = request.FacilityIdList.Aggregate((i, j) => i + "," + j);