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

时间:2011-02-02 14:07:33

标签: c#

我想修剪一串字符串的空白区域。我使用了以下代码,但它似乎不起作用。谁能解释为什么?

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

3 个答案:

答案 0 :(得分:10)

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

result = result.Select(f => f.Trim()).ToList();

答案 1 :(得分:2)

您正在lambda范围内重新分配参数变量。这是一个崩溃的形式:

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

void Lambda(string input)
{
    input = input.Trim();
}

最简单的方法可能是使用投影:

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

答案 2 :(得分:1)

foreach不会授予您对底层集合的写入权限,它只会遍历它,这意味着您的更改不会存储回集合中。

你可以做两件事:

  1. 制作新藏品

    var newResult = result.Select(f => f.Trim()).ToList();
    
  2. 使用普通的for循环并更改原始集合

    for (int index = 0; index < result.Count; index++)
        result[index] = result[index].Trim();