C# 不明白为什么ForEach命令不起作用

C# 不明白为什么ForEach命令不起作用,c#,C#,我想修剪字符串集合中的任何空白。我使用了以下代码,但似乎不起作用。有人能解释一下原因吗 result.ForEach(f => f = f.Trim()); 您正在lambda范围内重新分配参数变量。这是一种折叠形式: foreach(string value in myList) { Lambda(value); } void Lambda(string input) { input = input.Trim(); } 最简单的方法可能是使用投影: myList =

我想修剪字符串集合中的任何空白。我使用了以下代码,但似乎不起作用。有人能解释一下原因吗

result.ForEach(f => f = f.Trim());

您正在lambda范围内重新分配参数变量。这是一种折叠形式:

foreach(string value in myList)
{
    Lambda(value);
}

void Lambda(string input)
{
    input = input.Trim();
}
最简单的方法可能是使用投影:

myList = myList.Select(str => str.Trim()).ToList();

这将不起作用,因为您正在为局部变量分配新的字符串引用。这可能就是您正在寻找的:

result = result.Select(f => f.Trim()).ToList();
foreach不授予您对底层集合的写访问权,它只对其进行迭代,这意味着您的更改不会存储回集合中

你可以做两件事:

制作新的收藏

var newResult = result.Select(f => f.Trim()).ToList();
for (int index = 0; index < result.Count; index++)
    result[index] = result[index].Trim();
使用普通for循环并更改原始集合

var newResult = result.Select(f => f.Trim()).ToList();
for (int index = 0; index < result.Count; index++)
    result[index] = result[index].Trim();

谢谢雷克斯-有没有办法实现我想要的并且仍然使用lamda表达式?谢谢你的帮助-我给了你+1个感谢-我让我走上了正确的道路,但我做到了如下。。。结果=结果.ConvertAllf=>f.修剪@马克-这应该稍微更有效一点。当然,您牺牲了Select的多功能性,但是如果您需要一个没有问题的列表,那么也可以这样做;正如你所发现的,写一个列表是不好的。作为另一种解决方案,您能否在字符串进入列表之前对其进行修剪?那你甚至不需要做这个手术。