如何使用Lambda表达式在C#中的字符串列表中预加每一项

如何使用Lambda表达式在C#中的字符串列表中预加每一项,c#,lambda,C#,Lambda,我在这里找到了这个的VB版本,但我想使用Lambda表达式获取一个字符串列表,然后在列表中的每个项目前加一个字符串 似乎使用ForEach最终会按值发送字符串,因此任何更改都会消失。这是我希望得到的一行代码 listOfStrings.ForEach((listItem) => {listItem = listItem.Insert(0,"a");}); 字符串是不可变的,不能“就地”更改。因此,您必须替换列表中不能使用list.ForEach的每个条目。此时,您最好只列出一个新的列表:

我在这里找到了这个的VB版本,但我想使用Lambda表达式获取一个字符串列表,然后在列表中的每个项目前加一个字符串

似乎使用ForEach最终会按值发送字符串,因此任何更改都会消失。这是我希望得到的一行代码

listOfStrings.ForEach((listItem) => {listItem = listItem.Insert(0,"a");});

字符串是不可变的,不能“就地”更改。因此,您必须替换列表中不能使用
list.ForEach
的每个条目。此时,您最好只列出一个新的列表:

listOfStrings = listOfStrings.Select(value => "a" + value).ToList();
List x=新列表();
x、 添加(“d”);
List res=x.Select(c=>“a”+c.ToList();

如果需要就地修改列表,则适合使用显式的
for
循环

for (int index = 0; index < list.Count; index++)
{
     list[index] = // modify away!
}
for(int index=0;index

否则,将
选择(Func选择器)
与可选的
.ToList()
.ToArray()
一起使用,如六个字母变量所示。

您可以自行扩展:

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");});
publicstaticvoidforeachchange(此列表,Func Func)
{
for(int i=0;i{return listItem.Insert(0,“a”);});
现在可以工作了

编辑:

现在,使用ForEach进行迭代时,您无法更改集合。字符串是不可变的,因此您将无法像这样使用
ForEach
。使用,除了自定义扩展之外,没有其他方法可以使用lambda function.DOH!你赢了我。该死的机器人测试:)这是一段很好的代码,+1。你能详细说明一下这是怎么回事吗?-1,如果这奏效的话,这是个糟糕的策略。无论如何,属性(如列表的索引器)不能成为
ref
,也不能成为泛型类型规范的一部分。C是不完全C++的。@十六变量:它现在固定了,不确定为什么你认为这是一个坏主意,它混合到“功能”风格编程的副作用。但这是我个人的偏好,因此我将删除我的-1,因为它现在可以工作了。Lambdas、delegates和LINQ是一堆巨大的副作用,从“副作用”这个术语的功能意义上来说,它们都不是<代码>列表。选择(x=>x+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");});