【发布时间】:2010-05-22 00:51:57
【问题描述】:
如何在 C# 中将列表的所有内容连接到一个字符串中?
【问题讨论】:
如何在 C# 中将列表的所有内容连接到一个字符串中?
【问题讨论】:
正在搜索这个:
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.Join(" ", list.ToArray());
您可以使用 Aggregate 函数连接列表的所有项目。
以下是用逗号“,”连接列表的所有项目的示例
string s = list.Aggregate((i, j) => i + "," + j).ToString();
【讨论】:
如果您需要在加入时转换列表元素,可以使用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();
}
【讨论】:
如果您的对象中有一些属性并且想要在其中进行更多格式化,那么使用 LINQ,
var output = string.Join(" ", list.Select(t => t.Prop1 + " " + t.Prop2));
这将在对象的每个属性之间放置一个空格,并在每个对象之间放置一个空格。
【讨论】:
这是一个使用 StringBuilder 的简单解决方案:
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)传递给可以做任何它需要的任何事情的lambda表达式 - 例如附加当前字符串使用 lambda 表达式主体中指定的某些格式将列表添加到 StringBuilder。
【讨论】:
string.Join 做到了。
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();
}
还有一个用于对单个值进行更好的可选字符串转换的重载:
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);
【讨论】: