我在这里找到了这个版本的VB版本,但是我想使用Lambda Expression来获取字符串列表,然后在字符串中的每个项目前面添加一个字符串。
似乎使用ForEach最终按值发送字符串,因此任何更改都会消失。这是我希望工作的代码行。
listOfStrings.ForEach((listItem) => {listItem = listItem.Insert(0,"a");});
答案 0 :(得分:19)
字符串是不可变的,它们不能“就地”改变。因此,您必须替换列表中不能使用List<T>.ForEach
执行的每个条目。在这一点上,你最好只是制作一个新的清单:
listOfStrings = listOfStrings.Select(value => "a" + value).ToList();
答案 1 :(得分:4)
如果您需要修改到位列表,那么显式的for
循环是合适的。
for (int index = 0; index < list.Count; index++)
{
list[index] = // modify away!
}
否则,请将Select(Func<T, TOut> selector)
与可选的.ToList()
或.ToArray()
一起使用,如六个变量所示。
答案 2 :(得分:3)
List<string> x = new List<string>();
x.Add("d");
List<string> res = x.Select(c => "a" + c).ToList();
答案 3 :(得分:1)
您可以制作自己的扩展程序:
public static void ForEachChange<T>(this List<T> List, Func<T, T> Func)
{
for(int i = 0; i < List.Count; i++)
List[i] = Func(List[i]);
}
listOfStrings.ForEachChange((listItem) => {return listItem.Insert(0,"a");});
现在可以使用
编辑:
现在正在工作