Comment convertir une liste en chaîne en C #?
Lorsque j'exécute toString
sur un objet List, j'obtiens:
System.Collections.Generic.List`1 [System.String]
Comment convertir une liste en chaîne en C #?
Lorsque j'exécute toString
sur un objet List, j'obtiens:
System.Collections.Generic.List`1 [System.String]
Réponses:
Peut-être que vous essayez de faire
string combindedString = string.Join( ",", myList.ToArray() );
Vous pouvez remplacer "," par ce que vous voulez diviser les éléments de la liste.
Edit : Comme mentionné dans les commentaires, vous pouvez également le faire
string combindedString = string.Join( ",", myList);
Référence:
Join<T>(String, IEnumerable<T>)
Concatenates the members of a collection, using the specified separator between each member.
Je vais suivre mon instinct et supposer que vous voulez concaténer le résultat de l'appel ToString
à chaque élément de la liste.
var result = string.Join(",", list.ToArray());
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 cela Environment.NewLine
, vous pouvez le remplacer par un séparateur de ligne basé sur une chaîne de votre choix.
Si vous voulez quelque chose d'un peu 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)"
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 d'abord utiliser ToArray () dans la liste.
Vous avez un List<string>
- donc si vous voulez qu'ils soient concaténés, quelque chose comme
string s = string.Join("", list);
fonctionnerait (au moins dans .NET 4.0). Le premier paramètre est le délimiteur. Ainsi, vous pouvez également délimiter par des virgules, etc.
Vous pouvez également envisager d'utiliser StringBuilder pour exécuter des concaténations, plutôt que de former une liste.
La .ToString()
méthode des types référence est généralement résolue à System.Object.ToString()
moins que vous ne la remplaciez dans un type dérivé (éventuellement en utilisant des méthodes d'extension pour les types intégrés). Le comportement par défaut de cette méthode consiste à afficher le nom du type sur lequel elle est appelée. Donc, ce que vous voyez est un 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 pour le System.Collections.Generic.List<T>
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 de code libre et non testé. Je n'ai pas de compilateur à portée de main pour le moment. Vous voudrez donc l'expérimenter un peu.)
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.
String.Concat()
réalisera mieux la même chose.
Si vous cherchez à faire tourner les éléments d'une liste dans une grande chaîne longue, faites ceci: String.Join("", myList)
. Certaines anciennes versions de l'infrastructure ne vous permettent pas de passer un IEnumerable comme deuxième paramètre, vous devrez donc peut-être convertir votre liste en tableau en appelant .ToArray ().
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();
Cette méthode m'a aidé en essayant de récupérer des données à partir d'un fichier texte et de les stocker dans Array, puis de les affecter à une chaîne variable.
string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");
string marRes = string.Join(Environment.NewLine, lines.ToArray());
J'espère que cela peut aider quelqu'un !!!!
toutes les réponses ci-dessus ne fonctionnent PAS pour les listes imbriquées.