Reputation: 3313
I have a collection of strings which contain values like "goalXXvalue,goalXXLength,TestXX". It is a List(of String) I thought I would be able to loop through each item and replace the XX value which I've tried with the method below but the values don't change. Where am I going wrong? Thanks
metricList.ForEach(Function(n) n.Replace("XX", "1"))
Upvotes: 32
Views: 75481
Reputation: 8091
You need to assign result of String.Replace method. So your func should return something or use instead of foreach select
Upvotes: 1
Reputation: 13328
Problem: You aren't doing anything with the Replaced strings.
You could easily do this, using a simple loop:
C#
for(int i = 0; i < metricList.Count; i++)
{
metricList[i] = metricList[i].Replace("XX", "1");
}
VB.NET
For i As Integer = 0 To metricList.Count - 1
metricList(i) = metricList(i).Replace("XX", "1")
Next
Code iterates through all strings in metricList
and replaces XX
for 1
, it then stores the values back at the correct place in the list, what you aren't doing in your code...
Or using Linq:
C#
var newList = metricList.Select(x => x.Replace("XX", "1")).ToList();
VB.NET
Dim newList = metricList.Select(Function(x) x.Replace("XX", "1")).ToList()
Don't forget to add a reference to linq at the top of your class:
C#
using System.Linq;
VB.NET
Imports System.Linq
Upvotes: 16
Reputation: 34200
You have a few issues here:
.Replace
you return a new string. Calling n.Replace
doesn't modify n
.n
in your anonymous function won't affect the value that's in your list.Since it seems you're changing every string in your list, it seems unnecessary to try to modify the collection in-place. Therefore, the succint solution would be to use Linq would to create a new list:
var newList = metricList.Select(s => s.Replace("XX", "1")).ToList();
Upvotes: 48