2011-02-12 17 views
117

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

Cuando ejecuto toString en un objeto de lista, me sale:

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

+1

una lista es una colección, lo que se supone que esta cadena para que parezca? – Marko

+1

¿Qué significa esta pregunta? – Seva

+0

Puede probar cualquiera de las tres formas mencionadas [aquí] (https://stackoverflow.com/a/33142321/465053). – RBT

Respuesta

225

Quizás esté tratando de hacer

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

se puede reemplazar "" con lo que desea dividir los elementos en la lista.

+2

¿Quiere decir cadena combindedString = string.Join (",", myList.ToArray()); – sawe

+1

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

+3

He usado esto recientemente, funciona - simplemente omita el .ToArray() –

44

voy a ir con mi tripa siente y asume que desea concatenar el resultado de llamar al ToString en cada elemento de la lista.

var result = string.Join(",", list.ToArray()); 
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 de trabajo no le permiten pasar un IEnumerable como el segundo parámetro, por lo que puede necesitar convertir su lista a un array llamando a .ToArray().

3

Es difícil de decir, pero tal vez usted está buscando algo como:

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

Esto implícitamente llamar al método ToString() en cada uno de los elementos de la lista y concatenar.

+1

'String.Concat()' logrará lo mismo mejor. –

+0

Sí, sí lo hará! –

6

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

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

(. Tenga en cuenta que esto es a mano alzada y el código no probado no tengo un compilador a mano en el momento en lo que usted quiere experimentar con él un poco..)

+0

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

5

usted tiene un List<string> - por lo que si usted quiere que concatenados, algo así como

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

iba a funcionar (en .NET 4.0 como mínimo). El primer parámetro es el delimitador. Por lo tanto, también podría delimitar las comas, etc.

Es posible que también desee utilizar StringBuilder para ejecutar concatenaciones en lugar de formar una lista.

11

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

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

Will tomar [ "A", "B", "C"] y producir "(a) (b) (c)"

+1

Use Agregado con una semilla como primer parámetro para evitar arrojar InvalidOperationException para colecciones vacías. – Huacanacha

9

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 la versión de .NET puede que tenga que utilizar ToArray() en la lista de primera ..

9

Usted podría utilizar 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 t o Environment.NewLine puede reemplazarlo con un separador de líneas basado en cadenas de su elección.

0

La respuesta directa a su pregunta es String.Join como otros mencionaron.

Sin embargo, si usted necesita algunas manipulaciones, puede utilizar 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(); 
Cuestiones relacionadas