为什么我无法在LINQ Select()查询中向StringBuilder插入值

Cha*_*han 0 c# linq stringbuilder

为什么我不能通过LINQ Select()查询将列表中的字符串值插入StringBuilder ?

给定下面的代码,我希望构建的字符串结尾为,{CBA}但实际上是{}

我想念什么?

var testList = new List<string>
{
   "A",
   "B",
   "C"
};

var testStringBuilder = new StringBuilder("{}");
testList.Select(y => testStringBuilder.Insert(1,y));
Run Code Online (Sandbox Code Playgroud)

can*_*on7 7

Linq很懒-大多数linq方法只有在您实际遍历查询后才会执行。

Select反正不是正确的选择。这是一个映射函数-对于集合中的每个元素,它都会以某种方式对其进行转换,并返回转换后的元素。编写有Select副作用的(或任何linq方法)通常是一个非常糟糕的主意。

您正在做的是获取每个元素并对其进行处理-这是foreach循环的用例:

foreach (var element in testList)
{
    testStringBuilder.Insert(1, element);
}
Run Code Online (Sandbox Code Playgroud)

不要试图使用List<T>.ForEach它。它仅在上可用List<T>,而在其他任何集合上均不可用:故意将其排除在Linq之外,因为它的存在被认为是错误的。请参阅Eric Lippert的推理