我有一组字符串,其中包含“goalXXvalue,goalXXLength,TestXX”等值。它是一个List(字符串) 我以为我能够循环遍历每个项目并替换我尝试过的下面方法的XX值,但值不会改变。我哪里错了? 感谢
metricList.ForEach(Function(n) n.Replace("XX", "1"))
答案 0 :(得分:24)
这里有一些问题:
.Replace
时,你会返回一个新的字符串。致电n.Replace
并不会修改n
。n
不会影响列表中的值。由于您似乎正在更改列表中的每个字符串,因此似乎没有必要尝试就地修改集合。因此,succint解决方案将是使用Linq创建一个新列表:
var newList = metricList.Select(s => s.Replace("XX", "1")).ToList();
答案 1 :(得分:5)
问题:您没有对替换的字符串做任何事情 您可以使用一个简单的循环轻松完成此操作:
<强> 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
代码遍历metricList
中的所有字符串并替换XX
的{{1}},然后将值存储回列表中的正确位置,这是您在代码...
或使用Linq:
<强> C#强>
1
<强> VB.NET 强>
var newList = metricList.Select(x => x.Replace("XX", "1")).ToList();
不要忘记在班级顶部添加linq的引用:
<强> C#强>
Dim newList = metricList.Select(Function(x) x.Replace("XX", "1")).ToList()
<强> VB.NET 强>
using System.Linq;
答案 2 :(得分:0)
您需要指定String.Replace方法的结果。所以你的func应该返回somthing或者使用而不是foreach select
答案 3 :(得分:0)
using System.Linq;
List<string> strList = new List<string>() { "goalXXvalue", "goalXXLength", "TestXX" };
string str_OldValue = "XX";
string str_NewValue = "1";
strList = strList.Select(x => x.Replace(str_OldValue, str_NewValue)).ToList();
Console.WriteLine(string.Join(", ", strList));
Console.ReadLine();