51 votes

Joindre une liste de chaînes de caractères séparées par des virgules et placées 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 deux guillemets simples

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

mise à jour : j'ai réussi à faire fonctionner le système 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("`", "'");

80voto

Jay Riggs Points 30783

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 mettre le tout entre guillemets simples :

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

1 votes

Vous êtes géniaux. Je me suis serré la tête pour faire cela, mais cela ne m'a pas effleuré l'esprit.

2 votes

Je ne pense pas que l'appel à ToArray() soit nécessaire.

36voto

CraigH Points 279

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

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

2 votes

Mais cela ne permet pas d'échapper aux guillemets simples. La solution de Jay Riggs est correcte pour la situation de l'auteur de l'article.

4voto

Simon MᶜKenzie Points 3222

Essayez ceci :

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

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

0 votes

:) Vous avez raison. J'ai créé une liste de tests, je ne voulais pas vraiment dire "test's". Je voulais juste des données avec des apostrophes.

3voto

davecoulter Points 1322

Ce n'est pas au goût de tout le monde, mais j'aime créer des extensions d'aide pour ce genre de tâches, et les placer dans un espace de noms "utilitaires" :

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 votes

Celui-ci est sympa, mais je préfère le précédent parce que j'ai besoin de le placer à un seul endroit pour l'utiliser. Cependant, je viens d'apprendre à créer des extensions. Merci de votre compréhension.

0 votes

@gangt Pas de problème ! La première fois que j'ai appris les extensions, j'ai trouvé ça génial aussi.

0voto

ika Points 483

Vous pouvez toujours coder les guillemets avant de construire votre chaîne.

2 votes

Il s'agit d'un commentaire et non d'une réponse !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X