使用Array.Foreach和lambda表达式修改数组

9
我正在尝试修改数组的值,但它没有被修改:
string buzones = File.ReadAllText("c:\\Buzones");
string[] buzoneslist = buzones.Split(',');

Array.ForEach(buzoneslist, x =>
{
    x = x.Replace(",", "");
});

这就像我在没有将结果值设置为变量的情况下进行字符串替换:

s.replace(",", ""); 而不是 s=s.replace(",", "");

是否可能在lambda表达式中完成?


2
不,而且它永远不会。此外,风格很糟糕。使用“Select”代替,并创建一个新数组。 - leppie
1个回答

24

不可以在使用ForEach枚举数组期间修改它,而字符串是不可变的,因此没有函数可以原地修改实例。

你可以选择以下两个方法:

for (int i=0; i<buzoneslist.Length; i++) 
    buzoneslist[i] = buzoneslist[i].Replace(",", "");

或者:

buzoneslist = buzoneslist.Select(t => t.Replace(",", "")).ToArray();

我想如果你真的想使用lambda表达式,你可以编写一个扩展方法:
public static class Extensions {
    public static void ChangeEach<T>(this T[] array, Func<T,T> mutator) {
        for (int i=0; i<array.Length; i++) {
            array[i] = mutator(array[i]);
        }
    }
}

然后:

buzoneslist.ChangeEach(t => t.Replace(",", ""));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接