5

LINQPad で次のコードを試したところ、以下の結果が得られました。

List<string> listFromSplit = new List<string>("a, b".Split(",".ToCharArray())).Dump();
listFromSplit.ForEach(delegate(string s) 
{ 
  s.Trim(); 
});
listFromSplit.Dump();

「a」と「b」

文字 b は、私が期待していたように空白が削除されませんでした...?

どなたかアイデアをお持ちの方

[注: .Dump() メソッドは、LINQPad の拡張メソッドであり、オブジェクトの内容を適切にフォーマットされた方法で出力します]

4

8 に答える 8

17

トリミングされた文字列を作成しているだけで、何も割り当てていません。

var s = "  asd   ";
s.Trim();

s は更新されませんが、..

var s = "   asd   ";
s = s.Trim();

意思..

var listFromSplit = "a, b".Split(',').Select(s=>s.Trim());

おそらく、私はそれをどのように行うかでしょう。

于 2008-10-15T16:03:06.697 に答える
10

String.Trim() メソッドは、更新された文字列を表す文字列を返します。文字列オブジェクト自体を更新するのではなく、新しいオブジェクトを作成します。

あなたはこれを行うことができます:

s = s.Trim();

ただし、列挙中にコレクションを更新することはできないため、既存のリストを列挙しながら新しいリストを埋めるか、String.Split によって返される文字列配列を使用してリストを手動で設定する必要があります。

新しいリストを埋める:

List<string> temp = new List<string>("a, b".Split(",".ToCharArray()));
List<string> listFromSplit = new List<string>();

temp.ForEach(delegate(string s) 
{ 
    listFromSplit.Add(s.Trim()); 
});

listFromSplit.Dump();

手動入力:

string[] temp = "a, b".Split(",".ToCharArray());
List<string> listFromSplit = new List<string>();

foreach (string s in temp)
{
    listFromSplit.Add(s.Trim()); 
};

listFromSplit.Dump();
于 2008-10-15T16:09:18.523 に答える
4

Adrian Kuhnが投稿した回答に加えて、次のことができます。

var result = listFromSplit.Select(s => s.Trim());
于 2009-02-25T01:12:24.833 に答える
2

文字列インスタンスは不変です。1 つを変更すると思われるものはすべて、代わりに新しいインスタンスを作成します。

于 2008-10-15T16:06:16.347 に答える
1

私は IDE を起動して実行していませんが、これで仕事が完了するはずです (私が間違っていない限り)。

var result = from each in listFromSplit select each.Trim();
于 2008-10-15T16:53:51.930 に答える
1

トリミングされた結果を何にも割り当てていません。これは古典的なエラーです。string.Replace でこの間違いを犯す習慣から抜け出したばかりです :)

于 2008-10-15T16:04:33.980 に答える
0

他の人が提供したlinqオプションはうまく機能するはずです。別のオプションとして、forループを使用した拡張メソッドを次に示します。

    public static void TrimCollection(this IList<string> stringCollection) {

        for (int i = 0; i <= stringCollection.Count() - 1; i++)
            stringCollection[i] = stringCollection[i].Trim();

    }
于 2012-08-10T14:57:55.577 に答える
0

スペースとカンマの両方で分割し、空のエントリを削除します。すべて素敵でトリミングされています。ただし、文字列にスペースが含まれていないことを前提としています。

List<string> listFromSplit =
     new List<string>( "a , b ".Split( new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries ));
于 2008-10-15T16:09:55.370 に答える