2012-04-24 23 views
4

これはLINQPad関連または私が何か間違ったことをやっている場合、私は知らないが、このコードは、私が特にForEach(...)この小さなコードのForEach Replaceは、私が期待したことをしません。私はここで間違って何をしていますか?

私の目標は、交換することです、それはやりたいしません「」空の文字列でこれを行うには良い方法がありますか?

var lastNames = "SMITH, JOHNSON, WILLIAMS, JONES, BROWN"; 

var listLastNames = lastNames.Split(','); 
var list = listLastNames.ToList(); //so I can use .ForEach 
list.ForEach(i=>i.Replace(" ",String.Empty)); 

list.Dump(); //show it on output 
+4

あなたが結果を破棄しているという事実に加えて、私はあなたがおそらく 'Replace'ではなく、' Trim'を望んでいることに気付きます。 –

+0

'list.ForEach(i => i.Trim());'ここでは動作しませんでしたので、 'Replace'は...かもしれませんが、うまくいきませんでした... –

+2

' Trim() 'あなたが結果を取得していないので同じ問題がある場合を除いて、十分でしょう – PinnyM

答えて

13

他の人が指摘したように、文字列は不変です。 Replaceを呼び出すと、新しい文字列が返されます。既存の文字列を変更することはありません。ここであなたがやりたいことには次の3つの方法があります:

シーケンスに変換を行い、最後にリストに変換します

string s = "SMITH, JOHNSON, WILLIAMS, JONES, BROWN"; 
List<string> lastNames = s.Split(',').Select(x=>x.Trim()).ToList(); 

または、クエリ構文でも同じこと:

string s = "SMITH, JOHNSON, WILLIAMS, JONES, BROWN"; 
var query = from lastName in s.Split(',') 
      select lastName.Trim(); 
List<string> lastNames = query.ToList(); 

または、配列を作ると場所で配列を変異させる:で

string s = "SMITH, JOHNSON, WILLIAMS, JONES, BROWN"; 
string[] lastNames = s.Split(','); 
for (int i = 0; i < lastNames.Length; ++i) 
    lastNames[i] = lastNames[i].Trim(); 
+0

文字列配列内の要素が不変(内部的に文字列であるため)ではありませんか?意味は、lastNames [i]は不変ですか? – Dhananjay

+3

@Dhananjay:文字列は不変です。配列は変数の集合であり、定義上は変更可能である。それが彼らが変数と呼ばれる理由です。 –

+1

誰かが '[Pure]'関数の戻り値を無視すると、コンパイラの警告がうまくいくでしょう。このような警告には誤認は多くなく、注釈はコード契約チームによってすでに作成されています。コーディングもかなり簡単です(私はロスリンを学んでいる間に午後にそれを管理しました)。このミスはかなり一般的なので、利益もそこにあります。 – CodesInChaos

10

Replace新しい値を返しますが、あなたがそれを呼び出す元の文字列には影響しません。あなたが必要なものを行うには、Replaceからの結果と新しいコレクションを構築する必要があるだろう - あなたはSelectで簡単にこれを行うことができます。

var replaced = list.Select(i=>i.Replace(" ",String.Empty)); 

もう一つの利点は、あなたがList<T>にキャストする必要はありませんこれを行う。

そして他の人が指摘したように、あなたがReplace()よりもクリーンソリューションとしてTrim()を使用することができます。

var collection = lastNames.Split(',').Select(i => i.Trim()); 
+0

よく、この1つはそのことをやった!それに感謝します! –

関連する問題