【问题标题】:Modify array with Array.Foreach and lambda expression使用 Array.Foreach 和 lambda 表达式修改数组
【发布时间】:2013-06-06 21:50:49
【问题描述】:

我正在尝试修改数组的值,但它没有被修改:

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

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

这就像我在做一个字符串。替换而不将结果值设置为 变量:

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

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

【问题讨论】:

  • 不,而且永远不会。还有,可怕的风格。请改用Select 并创建一个新数组。

标签: c# arrays foreach lambda


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多