Reputation: 11063
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
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