2012-01-11 31 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('\'')); 

EDIT由Olivier Jacot-Descombes(它說明了這種解決方案不工作):

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

因爲字符串是不可變的,所以不會改變列表的內容;它只會計算新的字符串,並立即使它們有資格進行垃圾回收。 – phoog 2012-01-11 21:13:26

+0

是的phoog,他將不得不這樣做:'Enumerable.Range(0,strings.Count - 1).ForEach(i => strings [i] = strings [i] .TrimStart('\'')); '。但是,使用舊的for-loop做起來似乎更容易。 – 2012-01-11 21:19:46

+1

在任何提交的解決方案中,都會創建新的字符串。我選擇使用ForEach,因爲您可以將結果保存到當前變量或創建擴展方法。我不知道爲什麼這值得投票下來。 – Brownman98 2012-01-11 21:44:33

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確實沒有必要。你可以直接使用TrimStart():

strings.Add("'Value1".TrimStart('\''));