我有一个字符串列表,我正在尝试将它连接起来,这是一个更大的字符串。
foreach (var item in dir3)
{
resultDirectionHtml = string.Join(",",item.html_instructions);
}
await EmailSent(resultDirectionHtml);
目前发生的事情是它只发送列表的最后一个元素。 我怎样才能使它连接所有8个左右的字符串然后发送它?
答案 0 :(得分:5)
我会做这样的事情:
using System.Text;
var builder = new StringBuilder();
foreach (var item in dir3)
{
builder.Append(item.html_instructions);
builder.Append("<br />");
}
resultDirectionHtml = builder.ToString();
每当你&#34;添加&#34;对于一个字符串,它在内存中创建一个新的字符串,这样你最终会得到与该列表中的项目一样多的字符串,并且你会继续吃掉内存。 强烈建议不要在循环中使用这样的代码。
我将使用StringBuilder的5个或更多项目。任何不足,可能都不值得。
答案 1 :(得分:3)
使用+=
代替=
。目前,您将在每次循环迭代时重新分配整个字符串,而不是附加到它。
所以你的代码变成了:
foreach (var item in dir3)
{
resultDirectionHtml += string.Join(",",item.html_instructions);
}
await EmailSent(resultDirectionHtml);
答案 2 :(得分:2)
您可以使用投影而不是foreach循环
resultDirectionHtml += string.Join(",",dir3.Select(i => i.html_instructions));
答案 3 :(得分:1)
您的代码会在每次迭代时重新分配resultDirectionHtml
的值,因此您只会看到最后一个值。使用+=
代替=
foreach (var item in dir3)
{
resultDirectionHtml += string.Join(",",item.html_instructions);
}
另一方面,如果您喜欢使用LINQ
,那么您可以在Aggregate
扩展程序的帮助下轻松编写如下内容。
string[] words = { "a", "aa", "aaa" };
var output = words.Aggregate((current, next) => current + ", " + next);
//The value of output will be a, aa, aaa