加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – LINQ从String []追加到StringBuilder

发布时间:2020-12-15 18:19:46 所属栏目:百科 来源:网络整理
导读:我有一个String数组,我想通过LINQ添加到字符串生成器. 我基本上想说的是“对于这个数组中的每个项目,在这个StringBuilder中附加一行”. 我可以使用foreach循环很容易地做到这一点但是下面的代码似乎没有做任何事情.我错过了什么? stringArray.Select(x = st
我有一个String数组,我想通过LINQ添加到字符串生成器.

我基本上想说的是“对于这个数组中的每个项目,在这个StringBuilder中附加一行”.

我可以使用foreach循环很容易地做到这一点但是下面的代码似乎没有做任何事情.我错过了什么?

stringArray.Select(x => stringBuilder.AppendLine(x));

这工作的地方:

foreach(String item in stringArray)
{
  stringBuilder.AppendLine(item);
}

解决方法

如果您坚持以LINQy方式执行此操作:
StringBuilder builder = StringArray.Aggregate(
                            new StringBuilder(),(sb,s) => sb.AppendLine(s)
                        );

或者,正如Luke在另一篇文章的评论中指出的那样,你可以说

Array.ForEach(StringArray,s => stringBuilder.AppendLine(s));

Select不起作用的原因是Select用于投影和创建投影的IEnumerable.所以代码行

StringArray.Select(s => stringBuilder.AppendLine(s))

不会在每次迭代时迭代调用stringBuilder.AppendLine的StringArray.相反,它创建了一个IEnumerable< StringBuilder>可以列举的.

我想你可以说

var e = stringArray.Select(x => stringBuilder.AppendLine(x));
StringBuilder sb = e.Last();
Console.WriteLine(sb.ToString());

但那真是太可怕了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读