Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

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

share|improve this question
2  
No, and it never will. Also, horrible style. Use Select instead and create a new array. –  leppie Jun 11 '13 at 6:04
add comment

1 Answer

up vote 11 down vote accepted

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(",", ""));
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.