我有一个字符串集合,其中包含诸如"goalXXvalue,goalXXLength,TestXX“之类的值。这是一个列表(字符串),我认为我可以遍历每一项,并用下面的方法替换我尝试过的XX值,但这些值不会改变。我哪里错了?谢谢
metricList.ForEach(Function(n) n.Replace("XX", "1"))
发布于 2014-03-12 11:09:14
这里有几个问题:
.Replace
时,你会返回一个新的字符串。在匿名函数中调用n
.n
也不会影响上述enumeration.中的值,因为枚举集合时不能更改集合的内容,因为这会使n.Replace
无效
由于您似乎要更改列表中的每个字符串,因此似乎没有必要尝试就地修改集合。因此,成功的解决方案是使用Linq创建一个新的列表:
var newList = metricList.Select(s => s.Replace("XX", "1")).ToList();
发布于 2014-03-12 11:07:21
问题:您没有对替换的字符串做任何事情。
您可以使用一个简单的循环轻松地做到这一点:
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#
var newList = metricList.Select(x => x.Replace("XX", "1")).ToList();
VB.NET
Dim newList = metricList.Select(Function(x) x.Replace("XX", "1")).ToList()
不要忘记在类的顶部添加对linq的引用:
C#
using System.Linq;
VB.NET
Imports System.Linq
发布于 2014-03-12 11:02:30
您需要赋值String.Replace方法的结果。因此函数应该返回一些东西或使用,而不是foreach select
https://stackoverflow.com/questions/22349387
复制