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?.
Delimitry
3,0374 gold badges33 silver badges39 bronze badges
asked Jun 11, 2013 at 6:02
Carlos Landeras
11.1k11 gold badges61 silver badges84 bronze badges
1 Answer 1
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(",", ""));
answered Jun 11, 2013 at 6:07
Blorgbeard
104k50 gold badges237 silver badges276 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
lang-cs
Selectinstead and create a new array.