Присоединить список строк к запятой, разделенной и заключенной в одинарные кавычки - PullRequest
32 голосов
/ 04 августа 2011
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("`", "'");

Ответы [ 6 ]

53 голосов
/ 04 августа 2011

Это должно работать:

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("'", "''"))));
23 голосов
/ 18 сентября 2012

Это может быть проще, чем использовать string.replace

string s = "'" + String.Join("','", test) + "'";
3 голосов
/ 04 августа 2011

Это не всем по вкусу, но мне нравится создавать вспомогательные расширения для таких задач и помещать их в пространство имен «утилит»:

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 голосов
/ 04 августа 2011

Попробуйте:

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

Кстати, в «тестах» нет апострофа - апострофы не используются для множественного числа .

1 голос
/ 04 августа 2011

Вы всегда можете закодировать кавычки, прежде чем строить свою строку.

0 голосов
/ 08 июля 2015

Мне нравится версия без замены:

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