web-dev-qa-db-fra.com

Convertir une liste en chaîne en C #

Comment convertir une liste en chaîne en C #?

Lorsque j'exécute toString sur un objet List, je reçois:

System.Collections.Generic.List`1 [System.String]

158
IAdapter

Peut-être que vous essayez de faire

string combindedString = string.Join( ",", myList.ToArray() );

Vous pouvez remplacer "," par ce que vous souhaitez fractionner les éléments de la liste.

320
Øyvind Bråthen

Je vais y aller avec mon instinct et supposer que vous voulez concaténer le résultat de l'appel de ToString sur chaque élément de la liste.

var result = string.Join(",", list.ToArray());
52
ChaosPandion

Vous pouvez utiliser string.Join :

_List<string> list = new List<string>()
{
    "Red",
    "Blue",
    "Green"
};

string output = string.Join(Environment.NewLine, list.ToArray());    
Console.Write(output);
_

Le résultat serait:

_Red    
Blue    
Green
_

Au lieu de Environment.NewLine , vous pouvez le remplacer par un séparateur de ligne basé sur une chaîne de votre choix.

15
eandersson

Si vous voulez quelque chose de légèrement plus complexe qu'une simple jointure, vous pouvez utiliser LINQ, par exemple.

var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");

Prendra ["A", "B", "C"] et produira "(a) (b) (c)"

14
James Gaunt

String.Join(" ", myList) ou String.Join(" ", myList.ToArray()). Le premier argument est le séparateur entre les sous-chaînes.

var myList = new List<String> { "foo","bar","baz"};
Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"

Selon votre version de .NET, vous devrez peut-être utiliser d'abord ToArray () dans la liste.

13
Markus Johnsson

Vous avez un List<string> - donc si vous voulez les concaténer, quelque chose comme

string s = string.Join("", list);

fonctionnerait (au moins dans .NET 4.0). Le premier paramètre est le délimiteur. Donc, vous pouvez aussi séparer par des virgules, etc.

Vous pouvez également envisager d'utiliser StringBuilder pour exécuter des concaténations plutôt que de former une liste.

9
Marc Gravell

La méthode .ToString() pour les types de référence se résout généralement en System.Object.ToString() à moins que vous ne la remplaciez dans un type dérivé (en utilisant éventuellement des méthodes d'extension pour les types intégrés). Le comportement par défaut de cette méthode consiste à sortir le nom du type sur lequel elle est appelée. Donc, ce que vous voyez est le comportement attendu.

Vous pouvez essayer quelque chose comme string.Join(", ", myList.ToArray()); pour y parvenir. C'est une étape supplémentaire, mais cela pourrait être mis dans une méthode d'extension sur System.Collections.Generic.List<T> pour le rendre un peu plus facile. Quelque chose comme ça:

public static class GenericListExtensions
{
    public static string ToString<T>(this IList<T> list)
    {
        return string.Join(", ", list);
    }
}

(Notez qu'il s'agit d'un code libre et non testé. Je n'ai pas de compilateur à portée de main pour le moment. Vous aurez donc besoin de l'expérimenter un peu.)

8
David

C'est difficile à dire, mais vous cherchez peut-être quelque chose comme:

var myString = String.Join(String.Empty, myList.ToArray());

Cela appellera implicitement la méthode ToString () sur chacun des éléments de la liste et les concaténera.

3
Daniel Schaffer

Si vous souhaitez transformer les éléments d'une liste en une longue et longue chaîne, procédez comme suit: String.Join("", myList). Certaines versions plus anciennes de la structure ne vous permettent pas de passer un IEnumerable en tant que deuxième paramètre. Vous devrez donc peut-être convertir votre liste en tableau en appelant .ToArray ().

2
mattmc3

La réponse directe à votre question est String.Join comme d'autres l'ont mentionné.

Cependant, si vous avez besoin de quelques manipulations, vous pouvez utiliser Aggregate:

List<string> employees = new List<string>();
employees.Add("e1");
employees.Add("e2");
employees.Add("e3");

string employeesString = "'" + employees.Aggregate((x, y) => x + "','" + y) + "'";
Console.WriteLine(employeesString);
Console.ReadLine();
1
Lijo

Cette méthode m'a aidé lorsque j'essayais de récupérer des données d'un fichier texte et de les stocker dans un tableau, puis de les affecter à une chaîne de caractères.

string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");  
string marRes = string.Join(Environment.NewLine, lines.ToArray());

J'espère pouvoir aider quelqu'un !!!!

0
PatsonLeaner