Convertir una lista a una cadena en C #


185

¿Cómo convierto una lista a una cadena en C #?

Cuando ejecuto toStringen un objeto List, obtengo:

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


1
Una lista es una colección, ¿cómo se supone que debe ser esta cadena?
Marko

Puede probar cualquiera de las tres formas mencionadas aquí .
RBT

Respuestas:


366

Tal vez estás tratando de hacer

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

Puede reemplazar "," por el que desea dividir los elementos en la lista.

Editar : como se menciona en los comentarios, también puedes hacer

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

Referencia:

Join<T>(String, IEnumerable<T>) 
Concatenates the members of a collection, using the specified separator between each member.

44
¿te refieres a string combindedString = string.Join (",", myList.ToArray ());
Sawe

2
Argumento '2': no ​​se puede convertir de 'System.Collections.Generic.List <string>' a 'string []'
Ash

9
Utilicé esto recientemente, funciona, solo omita el .ToArray ()
Adrian K

3
@AdrianK tiene razón porque .Net 4.0 agregó la capacidad de pasar cualquier IEnumerable <cadena>. Sin embargo, 4.0 se lanzó en abril de 2010, antes de que esta pregunta y respuesta fueran publicadas, por lo que tal vez la gente aquí todavía no lo sabía (aparte de algunas de las siguientes)
Andrew Steitz,

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

55

Voy a seguir mi instinto y asumir que quieres concatenar el resultado de llamar ToStringa cada elemento de la lista.

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

16

Podrías usar string.Join:

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

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

El resultado sería:

Red    
Blue    
Green

Como alternativa Environment.NewLine, puede reemplazarlo con un separador de línea basado en cadenas de su elección.


14

Si desea algo un poco más complejo que una simple unión, puede usar LINQ, por ejemplo

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

Tomará ["A", "B", "C"] y producirá "(a) (b) (c)"


1
Use Aggregate con una semilla como primer parámetro para evitar lanzar InvalidOperationException para colecciones vacías.
Huacanacha

13

String.Join(" ", myList)o String.Join(" ", myList.ToArray()). El primer argumento es el separador entre las subcadenas.

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

Dependiendo de su versión de .NET, es posible que primero necesite usar ToArray () en la lista.


9

Tienes un List<string>- así que si quieres concatenarlos, algo así como

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

funcionaría (en .NET 4.0 al menos). El primer parámetro es el delimitador. Entonces también podría delimitar comas, etc.

También es posible que desee ver el uso de StringBuilder para ejecutar concatenaciones, en lugar de formar una lista.


8

El .ToString()método para los tipos de referencia generalmente se resuelve a System.Object.ToString()menos que lo anule en un tipo derivado (posiblemente utilizando métodos de extensión para los tipos integrados). El comportamiento predeterminado para este método es mostrar el nombre del tipo en el que se llama. Entonces, lo que estás viendo es el comportamiento esperado.

Podrías intentar algo como string.Join(", ", myList.ToArray());lograr esto. Es un paso adicional, pero se podría poner en un método de extensión System.Collections.Generic.List<T>para hacerlo un poco más fácil. Algo como esto:

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

(Tenga en cuenta que este es un código libre y no probado. No tengo un compilador a mano en este momento. Por lo tanto, querrá experimentar un poco con él).


funciona cuando lo llamo no ToString o lo ejecuto con un parámetro genérico. Pero me gusta tu idea de usar el método de extensión :)
IAdapter


2

Si usted está buscando para convertir los elementos de una lista en una cadena larga grande, hacer esto: String.Join("", myList). Algunas versiones anteriores del marco no le permiten pasar un IEnumerable como segundo parámetro, por lo que es posible que necesite convertir su lista en una matriz llamando a .ToArray ().


2

La respuesta directa a su pregunta es String.Joincomo otros han mencionado.

Sin embargo, si necesita algunas manipulaciones, puede usar 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
en el código de producción, asegúrese de que su lista tenga algún elemento; de lo contrario, arrojará una excepción.
AZ_

1

Este método me ayudó cuando intenté recuperar datos del archivo de texto y almacenarlos en una matriz, luego asignarlos a una cadena disponible.

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

Ojalá pueda ayudar a alguien !!!!


0

Esto parece funcionar para mí.

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.