Carlos Landeras
Carlos Landeras

Reputation: 11063

Modify array with Array.Foreach and lambda expression

I'm trying to modify the values of the array but it doesn't get modified:

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

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

It's like I'm doing a string.Replace without setting the resultant value to the variable:

s.replace(",", ""); instead of s=s.replace(",", "");

Is it possible to accomplish inside a lambda expression?.

Upvotes: 9

Views: 34005

Answers (1)

Blorgbeard
Blorgbeard

Reputation: 103437

No, you can't modify an array while you're enumerating it with ForEach, and strings are immutable so there's no function that will modify the instance in-place.

You could do either:

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

Or:

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

I suppose if you really wanted to use a lambda, you could write an extension method:

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]);
        }
    }
}

And then:

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

Upvotes: 24

Related Questions