2011-02-02 105 views
6

我想修剪任何字符串集合中的空白区域。我使用了下面的代码,但它似乎不工作。谁能解释为什么?不明白为什么ForEach命令不起作用

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

类似(但对于Java):http://stackoverflow.com/questions/48 51663/iteration-of-liststring-with-modyfing-string – finnw 2011-02-02 14:19:34

+1

只能使用“ForEach”和“foreach”来从列表中读取*;正如你发现的那样,将*写入列表并不能很好地工作。作为替代解决方案,您可以在进入列表之前修整字符串*吗?那么你甚至不需要做这个操作。 – 2011-02-02 15:47:30

回答

10

这是行不通的,因为你分配一个新的字符串引用一个局部变量。这可能是你在找什么:

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

您正在重新指定lambda范围内的参数变量。它的折叠形式:

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

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

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

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

感谢雷克斯 - 有没有办法实现我想要的,并仍然使用lamda表达式? – 2011-02-02 14:10:46

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(); 
    
相关问题