2011-08-03 44 views
23
List<string> test = new List<string>(); 
test.Add("test's"); 
test.Add("test"); 
test.Add("test's more"); 
string s = string.Format("'{0}'", string.Join("','", test)); 

現在s是'test's','test','test's more' 但我需要2個單引號加入字符串逗號分隔的列表,並在單引號

這樣更換內報價:'test''s','test','test''s more'

更新:我得到它的工作如下,但如果可能的話,我寧願更清潔的方式。

string s = string.Format("`{0}`", string.Join("`,`", test)).Replace("'", "''").Replace("`", "'"); 

回答

41

這應該工作:

List<string> test = new List<string>(); 
test.Add("test's"); 
test.Add("test"); 
test.Add("test's more"); 
string s = string.Join("','", test.Select(i => i.Replace("'", "''")).ToArray()); 

如果你真的希望在單引號整個事情:

string s = string.Format("'{0}'", string.Join("','", test.Select(i => i.Replace("'", "''")).ToArray())); 
+1

你們真棒。我一直在努力做到這一點,但這並沒有引起我的注意。 – gangt

+2

我不認爲ToArray()調用是必要的。 – JMS10

1

在構建字符串之前,始終可以對引號進行編碼。

2

試試這個:

string s = string.Join(",", test.Select(x => string.Format("'{0}'", x.Replace("'", "''")))); 

順便說一句,有沒有撇號 「試驗」 - 撇號aren't used for plurals

+0

:)你是對的。我編寫了一些測試列表,我並不是想說測試的。只有一些撇號數據是我想要的。 – gangt

2

這不是每個人的口味,但我喜歡創造這些種任務助手擴展,並把它們放入一個「實用」的命名空間:

public static class ListExtensions 
{ 
    public static void AddDoubleQuoted(this List<string> list, string input) 
    { 
    input = input.Replace("'", "''"); 
    list.Add(input); 
    } 
} 

List<string> test = new List<string>(); 
test.AddDoubleQuoted("test's"); 
test.AddDoubleQuoted("test"); 
test.AddDoubleQuoted("test's more"); 
string s = string.Format("'{0}'", string.Join("','", test)); 
+0

這個很酷,我更喜歡上面那個,因爲我只需要在一個地方使用它就可以使用它。不過,我剛剛學會了如何創建擴展。謝謝。 – gangt

+0

@gangt沒問題!我第一次學習擴展時,我認爲它也非常棒。 – davecoulter

17

這可能是更容易比使用string.replace

string s = "'" + String.Join("','", test) + "'"; 
+1

但是這並不能逃避單引號。 Jay Riggs的解決方案對於原始海報的情況是正確的。 – JMS10

0

我喜歡沒有替換版本:

using System.Linq; 
(...) 
string s = String.Join(", ", from l in MyList select String.Format("'{0}'", l));