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

时间:2013-06-11 06:02:29

标签: c# arrays foreach lambda

我正在尝试修改数组的值但不会被修改:

string buzones = File.ReadAllText("c:\\Buzones");
string[] buzoneslist = buzones.Split(',');

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

就像我正在做一个string.Replace而没有将结果值设置为 变量:

s.replace(",", "");代替s=s.replace(",", "");

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

1 个答案:

答案 0 :(得分:15)

不,你在使用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(",", ""));