Converti un elenco in una stringa in C #


185

Come faccio a convertire un elenco in una stringa in C #?

Quando eseguo toStringun oggetto Elenco, ottengo:

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


1
Una lista è una raccolta, come dovrebbe essere questa stringa?
Marko,

Puoi provare uno dei tre modi menzionati qui .
RBT

Risposte:


366

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.

4
vuoi dire stringa combindedString = string.Join (",", myList.ToArray ());
visto il

2
Argomento '2': impossibile convertire da 'System.Collections.Generic.List <string>' in 'string []'
Ash,

9
L'ho usato di recente, funziona - basta omettere il .ToArray ()
Adrian K

3
@AdrianK hai ragione perché .Net 4.0 ha aggiunto la possibilità di passare qualsiasi <stringa> IEnumerable. Tuttavia, la versione 4.0 è stata rilasciata nell'aprile 2010, prima che questa domanda e la risposta venissero pubblicate, quindi forse la gente qui non ne era ancora a conoscenza (a parte alcune in basso)
Andrew Steitz,

Per vb.net, Dim combindedString As String = String.Join (",", myList.ToArray ())
PartTimeNerd

55

Sto andando con il mio istinto e presumo che tu voglia concatenare il risultato della chiamata ToStringsu ogni elemento della lista.

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

16

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.


14

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


1
Utilizzare Aggrega con un seme come primo parametro per evitare di generare InvalidOperationException per raccolte vuote.
Huacanacha,

13

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.


9

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.


8

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 '.)


funziona quando lo chiamo non ToString o lo eseguo con un parametro generico. Ma mi piace la tua idea di utilizzare il metodo di estensione :)
IAdapter,


2

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 ().


2

La risposta diretta alla tua domanda è String.Joincome 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();

1
nel codice di produzione assicurati che la tua lista abbia qualche elemento altrimenti genererà un'eccezione.
AZ_

1

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 !!!!


0

Questo sembra funzionare per me.

var combindedString = new string(list.ToArray());

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.