2012-01-11 12 views
0

私はリスト文字列を持っており、各値には先頭の引用符が含まれています。今や、文字列のさらに下の引用符がある可能性があり、それらは残す必要があります。リストから引用符を削除する<string> linqを使用

List<string> strings = new List<string>(); 
strings.Add("'Value1"); 
strings.Add("'Values2 This 2nd ' should stay"); 

linqの方法はありますか?

答えて

0
strings.ForEach(s => s = s.TrimStart('\'')); 

オリヴィエJacot-Descombes(それは、このソリューションが動作しないことを示している)によるEDIT:

List<string> strings = new List<string>(); 
strings.Add("'Value1"); 
strings.Add("'Values2 This 2nd ' should stay"); 

Console.WriteLine("Before:"); 
foreach (string s in strings) { 
    Console.WriteLine(s); 
} 

strings.ForEach(s => s = s.TrimStart('\'')); 

Console.WriteLine(); 
Console.WriteLine("After:"); 
foreach (string s in strings) { 
    Console.WriteLine(s); 
} 
Console.ReadKey(); 

これは、コンソール上で次の出力を生成します。

Before: 
'Value1 
'Values2 This 2nd ' should stay 

After: 
'Value1 
'Values2 This 2nd ' should stay 
+0

文字列は不変であるため、リストの内容は変更されません。したがって、TrimStart()を単独で使用することもできます。新しい文字列を計算してすぐにガベージコレクションの対象にするだけです。 – phoog

+0

Yes phoog、彼は次のようなことをしなければなりません:Enumerable.Range(0、strings.Count - 1).ForEach(i => strings [i] = strings [i] .TrimStart( '\' ')); '。しかし、良いfor-loopでやっている方が簡単です。 –

+1

提出されたすべてのソリューションで、新しい文字列が作成されます。結果を現在の変数に保存するか、拡張メソッドを作成できるので、ForEachを使用することにしました。なぜこれが投票に値するのかわからない。 – Brownman98

3
strings.Select(s => s.StartsWith("'") ? s.Substring(1) : s); 
4
strings = strings.Select(x => x.StartsWith("'") ? x.Substring(1) : x).ToList(); 
3
var result = strings.Select(s => s.TrimStart('\'')); 

注:これは( ')のすべての主要な発生を削除します。しかし、私はあなたが"''Value1"のような文字列を持っていないと仮定します。

1

これにはLINQは本当に不要です。

strings.Add("'Value1".TrimStart('\'')); 
関連する問題