web-dev-qa-db-fra.com

Joindre la liste des chaînes à séparer par des virgules et mettre entre guillemets simples

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

maintenant le s est 'test's','test','test's more' mais je dois remplacer les guillemets intérieurs par 2 guillemets simples

comme ceci: 'test''s','test','test''s more'

mise à jour: je l’ai obtenu comme ci-dessous, mais je préférerais une méthode plus propre si possible.

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

Cela devrait fonctionner:

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

Et si vous voulez vraiment tout mettre entre guillemets simples:

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

Cela peut être plus facile que d'utiliser string.replace

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

Essaye ça:

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

A propos, il n'y a pas d'apostrophe dans les "tests" - les apostrophes ne sont pas utilisés pour les pluriels .

3
Simon MᶜKenzie

Cela ne convient pas à tout le monde, mais j'aime bien créer des extensions d'assistance pour ce type de tâches et les placer dans un espace de noms "utilitaire":

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

Vous pouvez toujours encoder des guillemets avant de construire votre chaîne. 

1
ika