从字符串列表中连接字符串

时间:2016-12-09 00:10:12

标签: c# string concatenation

我有一个字符串列表,我正在尝试将它连接起来,这是一个更大的字符串。

foreach (var item in dir3)
     {
           resultDirectionHtml = string.Join(",",item.html_instructions);
     }


await EmailSent(resultDirectionHtml);

目前发生的事情是它只发送列表的最后一个元素。 我怎样才能使它连接所有8个左右的字符串然后发送它?

4 个答案:

答案 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