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?.
forEach() does not mutate the array on which it is called. (However, callback may do so).
ForEach() is a declarative syntax form—this simplifies certain code patterns. Usually the Array. ForEach method is mostly used on arrays of objects.
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(",", ""));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With