web-dev-qa-db-ja.com

文字列のリストをカンマ区切りで結合し、単一引用符で囲みます

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("`", "'");
32
GaneshT

これは動作するはずです:

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("'", "''")));

そして、あなたが本当に全体を一重引用符で囲むことを探しているなら:

string s = string.Format("'{0}'", string.Join("','", test.Select(i => i.Replace("'", "''"))));
53
Jay Riggs

これは、string.replaceを使用するよりも簡単です

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

これを試して:

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

ところで、「テスト」にはアポストロフィはありません-アポストロフィ 複数形には使用されません

3

すべての人の好みではありませんが、これらの種類のタスクのヘルパー拡張機能を作成し、それらを「ユーティリティ」名前空間に入れたいです。

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));
3
davecoulter

文字列を作成する前に、常に引用符をエンコードできます。

1
ika