替换列表中的字符串值

mjr*_*odt 15 c# linq vb.net

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

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

Dan*_*zey 27

你有几个问题:

  • 首先,字符串是不可变的,所以当你调用.Replace时返回一个新的字符串.呼叫n.Replace不会修改n.
  • n在匿名函数中分配不会影响列表中的值.
  • 无论上述情况如何,您都无法在枚举时更改集合的内容,因为它会使枚举失效.

由于您似乎正在更改列表中的每个字符串,因此似乎没有必要尝试就地修改集合.因此,succint解决方案将使用Linq来创建一个新列表:

var newList = metricList.Select(s => s.Replace("XX", "1")).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 由于他说他使用的是通用列表,我建议使用 ConvertAll(),因为它不会像 Select & ToList 一样在集合上迭代两次。 (2认同)
  • Select 不会迭代它只是定义的列表,并且可枚举两个列表迭代的列表。一次迭代 (2认同)

Max*_*Max 5

问题:您没有对替换字符串执行任何操作.
您可以使用简单的循环轻松完成此操作:

C#

for(int i = 0; i < metricList.Count; i++)
{
    metricList[i] = metricList[i].Replace("XX", "1");
}
Run Code Online (Sandbox Code Playgroud)

VB.NET

For i As Integer = 0 To metricList.Count - 1
    metricList(i) = metricList(i).Replace("XX", "1")
Next
Run Code Online (Sandbox Code Playgroud)

代码遍历所有字符串metricList并替换XX1,然后将值存储回列表中的正确位置,您在代码中没有做什么...

或者使用Linq:

C#

var newList = metricList.Select(x => x.Replace("XX", "1")).ToList();
Run Code Online (Sandbox Code Playgroud)

VB.NET

Dim newList = metricList.Select(Function(x) x.Replace("XX", "1")).ToList()
Run Code Online (Sandbox Code Playgroud)

不要忘记在课程顶部添加linq的引用:

C#

using System.Linq;
Run Code Online (Sandbox Code Playgroud)

VB.NET

Imports System.Linq
Run Code Online (Sandbox Code Playgroud)