Come faccio a convertire un elenco in una stringa in C #?
Quando eseguo toString
un oggetto Elenco, ottengo:
System.Collections.Generic.List`1 [System.String]
Come faccio a convertire un elenco in una stringa in C #?
Quando eseguo toString
un oggetto Elenco, ottengo:
System.Collections.Generic.List`1 [System.String]
Risposte:
Forse stai provando a fare
string combindedString = string.Join( ",", myList.ToArray() );
È possibile sostituire "," con ciò per cui si desidera dividere gli elementi nell'elenco.
Modifica : come menzionato nei commenti, potresti anche fare
string combindedString = string.Join( ",", myList);
Riferimento:
Join<T>(String, IEnumerable<T>)
Concatenates the members of a collection, using the specified separator between each member.
Sto andando con il mio istinto e presumo che tu voglia concatenare il risultato della chiamata ToString
su ogni elemento della lista.
var result = string.Join(",", list.ToArray());
Puoi usare string.Join
:
List<string> list = new List<string>()
{
"Red",
"Blue",
"Green"
};
string output = string.Join(Environment.NewLine, list.ToArray());
Console.Write(output);
Il risultato sarebbe:
Red
Blue
Green
In alternativa Environment.NewLine
, è possibile sostituirlo con un separatore di riga basato su stringa di propria scelta.
Se vuoi qualcosa di leggermente più complesso di un semplice join puoi usare LINQ ad es
var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");
Prenderà ["A", "B", "C"] e produrrà "(a) (b) (c)"
String.Join(" ", myList)
oppure String.Join(" ", myList.ToArray())
. Il primo argomento è il separatore tra le sottostringhe.
var myList = new List<String> { "foo","bar","baz"};
Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"
A seconda della versione di .NET in uso, potrebbe essere necessario utilizzare prima ToArray () nell'elenco.
Hai un List<string>
- quindi se li vuoi concatenati, qualcosa del genere
string s = string.Join("", list);
funzionerebbe (almeno in .NET 4.0). Il primo parametro è il delimitatore. Quindi potresti anche delimitare una virgola ecc.
Potresti anche voler guardare usando StringBuilder per eseguire concatenazioni in esecuzione, piuttosto che formare un elenco.
Il .ToString()
metodo per i tipi di riferimento di solito si risolve a System.Object.ToString()
meno che non venga sovrascritto in un tipo derivato (possibilmente utilizzando metodi di estensione per i tipi predefiniti). Il comportamento predefinito per questo metodo consiste nell'output del nome del tipo su cui viene chiamato. Quindi quello che stai vedendo è un comportamento previsto.
Potresti provare qualcosa di simile string.Join(", ", myList.ToArray());
per raggiungere questo obiettivo. È un passaggio aggiuntivo, ma potrebbe essere inserito in un metodo di estensione System.Collections.Generic.List<T>
per renderlo un po 'più semplice. Qualcosa come questo:
public static class GenericListExtensions
{
public static string ToString<T>(this IList<T> list)
{
return string.Join(", ", list);
}
}
(Nota che questo è un codice a mano libera e non testato. Al momento non ho un compilatore a portata di mano. Quindi ti consigliamo di sperimentarlo un po '.)
È difficile da dire, ma forse stai cercando qualcosa come:
var myString = String.Join(String.Empty, myList.ToArray());
Ciò chiamerà implicitamente il metodo ToString () su ciascuno degli elementi nell'elenco e li concatenerà.
String.Concat()
otterrà la stessa cosa meglio.
Se stai cercando di trasformare gli elementi di una lista in una grande lunga serie, fare questo: String.Join("", myList)
. Alcune versioni precedenti del framework non consentono di passare un IEnumerable come secondo parametro, quindi potrebbe essere necessario convertire l'elenco in un array chiamando .ToArray ().
La risposta diretta alla tua domanda è String.Join
come altri hanno già detto.
Tuttavia, se hai bisogno di alcune manipolazioni, puoi usare 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();
Questo metodo mi ha aiutato durante il tentativo di recuperare i dati dal file di testo e archiviarli in array, quindi assegnarli a una stringa disponibile.
string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");
string marRes = string.Join(Environment.NewLine, lines.ToArray());
Spero che possa aiutare qualcuno !!!!
tutte le risposte sopra NON funzionano per gli elenchi nidificati.