2010-12-02 21 views
9

A menudo aparece. Tengo una lista y quiero ir a una cadena delimitada por comas de todos los elementos de la lista que puedo usar en SQL.Lista <long> a una cadena delimitada por comas en C#

¿Cuál es la manera más elegante de hacer esto en C#? Iterar sobre todos ellos está bien, excepto que el primero o el último elemento tienen que ser especiales porque no quiero comas iniciales o finales.

¿Tienes un buen trazador de líneas?

Respuesta

22

string.join es su amigo ...

var list = new List<long> {1, 2, 3, 4}; 
var commaSeparated = string.Join(",", list); 
+0

Creo que da un error de sintaxis: String.Join no tomará una lista como una segunda arg. –

+0

@John Shedletsky: .NET Framework 4.0 presentó [String.Join Method (String, IEnumerable )] (http://msdn.microsoft.com/en-us/library/dd992421.aspx) – dtb

+0

@dtb: parece para ser un nuevo método de .NET 4 – Vlad

12
List<long> items = // init here 
string result = string.Join(", ", items.Select(i => i.ToString()).ToArray()); 

No estoy seguro de si es la manera más elegante, ¡pero es un trazador de líneas 1!

Ahora también hay un string.Join que acepta un IEnumerable<T>, por lo que es aún más corto:

string result = string.Join(", ", items); 

Gracias a la inferencia de tipos, no es necesario que se especifique Join<long>

3
string.Join(",", Array.ConvertAll(list.ToArray(), item => item.ToString())); 

(escrito directamente en el puesto, así que pude haber conseguido un par de los parámetros incorrectos, pero se entiende la idea)

+1

Esta primera asigna una nueva matriz a partir de la 'Lista <>' debido a '.ToArray()', luego asigna otra matriz debido a 'Array.ConvertAll'. Desde .NET versión 4.0 (Visual Studio 2010) hay una sobrecarga que funciona directamente, 'string.Join (", ", list)'. –

1
public static string CommaSeparate(this IEnumerable<string> values) 
    { 
     if (values.Count() == 0) return "[none]"; 
     return string.Join(", ", values.ToArray()); 
    } 

Este es un método de extensión que utilizo para hacer esto en mis aplicaciones. Está basado en IEnumerable pero debería ser similar para List.

2

Si tuviera que hacerlo de forma manual no debería tener casos especiales para los dos primeros y el último valor, en vez usted podría hacer esto:

List<long> junk = // have some values here; 
string separator = string.Empty; 
string list = string.Empty; 

foreach(long john in junk) 
{ 
    list += separator + john.ToString(); 
    separator = ", "; 
} 

No decir que usted debe hacer esto, esta relación tan un comentario.

2
// Content IDs 
List<long> cIds = new List<long>(); 
cIds.Add(1); 
cIds.Add(2); 
cIds.Add(1); 
cIds.Add(3); 
cIds.Add(3); 
string ids = string.Join(",", cIds.Distinct().Select(x => x.ToString()).ToArray()); 
// The example return the following output: 
// ids = "1,2,3" 

devuelve una lista de elementos únicos delimitados por comas.

0
List<long> list =new List<long>(){1,2,3,4,5,6,7}; 

StringBuilder str =new StringBuilder();  

foreach(var i in list) 
{ 
str.Append(i).Append(','); 
} 

Esto añadirá los valores largos en str (StringBuilder) como

Ans: str = 1,2,3,4,5,6,7

+0

Esta pregunta ya ha tenido una respuesta marcada como aceptada hace un tiempo. Lo mejor es solo reactivar una pregunta si tu respuesta realmente agrega algo útil/útil. –

Cuestiones relacionadas