2011-02-02 201 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(); 
    
相關問題