替换列表中的字符串值

时间:2014-03-12 10:59:52

标签: c# vb.net linq

我有一组字符串,其中包含“goalXXvalue,goalXXLength,TestXX”等值。它是一个List(字符串) 我以为我能够循环遍历每个项目并替换我尝试过的下面方法的XX值,但值不会改变。我哪里错了? 感谢

metricList.ForEach(Function(n) n.Replace("XX", "1"))

4 个答案:

答案 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();