9

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?.

1
  • 2
    No, and it never will. Also, horrible style. Use Select instead and create a new array. Commented Jun 11, 2013 at 6:04

1 Answer 1

24

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(",", ""));
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.