「goalXXvalue、goalXXLength、TestXX」のような値を含む文字列のコレクションがあります。これは(文字列の)リストです。各項目をループして、以下の方法で試したXX値を置き換えることができると思いましたが、値は変更されません。どこがいけないの?ありがとう
metricList.ForEach(Function(n) n.Replace("XX", "1"))
ここにいくつかの問題があります:
.Replace
を呼び出すと、新しい文字列が返されます。 n.Replace
を呼び出しても、n
は変更されません。n
に割り当てても、リストの値には影響しません。リスト内のすべての文字列を変更しているようなので、コレクションをインプレースで変更する必要はありません。したがって、簡潔な解決策は、Linqを使用して新しいリストを作成することです。
var newList = metricList.Select(s => s.Replace("XX", "1")).ToList();
問題:置換された文字列で何もしていません。
これは、単純なループを使用して簡単に実行できます。
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
String.Replaceメソッドの結果を割り当てる必要があります。したがって、あなたのfuncは何かを返すか、foreach selectの代わりに使用する必要があります