我有一個列表字符串,每個值都有一個需要刪除的前導引號。現在可能會有更多的字符串,並且需要留下來。從列表中刪除報價<string>使用linq
List<string> strings = new List<string>();
strings.Add("'Value1");
strings.Add("'Values2 This 2nd ' should stay");
是否有linq方式?
我有一個列表字符串,每個值都有一個需要刪除的前導引號。現在可能會有更多的字符串,並且需要留下來。從列表中刪除報價<string>使用linq
List<string> strings = new List<string>();
strings.Add("'Value1");
strings.Add("'Values2 This 2nd ' should stay");
是否有linq方式?
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
strings.Select(s => s.StartsWith("'") ? s.Substring(1) : s);
strings = strings.Select(x => x.StartsWith("'") ? x.Substring(1) : x).ToList();
var result = strings.Select(s => s.TrimStart('\''));
注:這將刪除的(')所有領先的出現。不過,我認爲你不會有像"''Value1"
這樣的字符串。
對於這一點,LINQ確實沒有必要。你可以直接使用TrimStart():
strings.Add("'Value1".TrimStart('\''));
因爲字符串是不可變的,所以不會改變列表的內容;它只會計算新的字符串,並立即使它們有資格進行垃圾回收。 – phoog 2012-01-11 21:13:26
是的phoog,他將不得不這樣做:'Enumerable.Range(0,strings.Count - 1).ForEach(i => strings [i] = strings [i] .TrimStart('\'')); '。但是,使用舊的for-loop做起來似乎更容易。 – 2012-01-11 21:19:46
在任何提交的解決方案中,都會創建新的字符串。我選擇使用ForEach,因爲您可以將結果保存到當前變量或創建擴展方法。我不知道爲什麼這值得投票下來。 – Brownman98 2012-01-11 21:44:33