Присоединить список строк к запятой, разделенным и заключенным в одинарные кавычки
List<string> test = new List<string>();
test.Add("test's");
test.Add("test");
test.Add("test more");
string s = string.Format("'{0}'", string.Join("','", test));
теперь s равно 'test's','test','test more'
но мне нужно заменить внутренние кавычки на две одинарные кавычки
вот так: 'test''s','test','test' more'
update: я получил его для работы, как показано ниже, но я предпочел бы более чистый способ, если это возможно.
string s = string.Format("`{0}`", string.Join("`,`", test)).Replace("'", "''").Replace("`", "'");
Ответы
Ответ 1
Это должно работать:
List<string> test = new List<string>();
test.Add("test's");
test.Add("test");
test.Add("test more");
string s = string.Join("','", test.Select(i => i.Replace("'", "''")).ToArray());
И если вы действительно хотите вложить все это в одинарные кавычки:
string s = string.Format("'{0}'", string.Join("','", test.Select(i => i.Replace("'", "''")).ToArray()));
Ответ 2
Это может быть проще, чем использование string.replace
string s = "'" + String.Join("','", test) + "'";
Ответ 3
Попробуйте следующее:
string s = string.Join(",", test.Select(x => string.Format("'{0}'", x.Replace("'", "''"))));
Кстати, в "тестах" нет апострофа - апострофы не используются для множественных чисел.
Ответ 4
Это не каждый вкус, но мне нравится создавать вспомогательные расширения для этих задач и помещать их в пространство имен "utility":
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 more");
string s = string.Format("'{0}'", string.Join("','", test));
Ответ 5
Вы всегда можете кодировать кавычки, прежде чем строить свою строку.
Ответ 6
Мне нравится версия без Replace:
using System.Linq;
(...)
string s = String.Join(", ", from l in MyList select String.Format("'{0}'", l));