2012-02-11 5 views

Respuesta

11

Otra solución sería el uso de Aggregate. Esto se sabe que es mucho más lento luego las otras soluciones proporcionadas!

var ints = new List<int>{1,2,3,4}; 
var strings = 
      ints.Select(i => i.ToString(CultureInfo.InvariantCulture)) 
       .Aggregate((s1, s2) => s1 + ", " + s2); 

Consulte los comentarios a continuación por qué no debe usarlo. Use String.Join o StringBuilder en su lugar.

+6

-1 Una solución notoriamente mala para crear cadenas como esta (especialmente cuando la lista es larga). String.Join o StringBuilder son el camino a seguir. Triste por el desbordamiento de pila que un OP de baja calidad ni siquiera sabe cómo aceptar la mejor respuesta. –

+5

@GertArnold Estoy de acuerdo contigo. Solo quería mostrar otra solución y olvidé mencionar cualquier actuación. Traté de eliminar esta respuesta, pero no puedo. Actualizaré la respuesta para no usarla. –

+1

Eso es muy generoso. Se eliminó el voto negativo. –

17
var ints = new List<int>{1,3,4}; 
var stringsArray = ints.Select(i=>i.ToString()).ToArray(); 
var values = string.Join(",", stringsArray); 
+0

Gracias Albin. E para la tarea de reversión, a partir de una cadena de números enteros con comas, necesito obtener una lista . Luigi – Ciupaz

+4

En .NET 4 ['String.Join'] (http://msdn.microsoft.com/en-us/library/dd992421.aspx) tiene una sobrecarga tomando un' IEnumerable 'así que esto puede hacerse sin la matriz intermedia (esta sobrecarga llama a 'ToString()' en cada elemento de entrada): 'string.Join (", ", ints)'. – Richard

+1

@Ciupaz, para la tarea inversa, use ['String.Split()'] (http://msdn.microsoft.com/en-us/library/system.string.split.aspx). –

64
var nums = new List<int> {1, 2, 3}; 
var result = string.Join(", ", nums); 
+0

Gracias Meysam – Ciupaz

+4

Tenga en cuenta que esto no funciona en .NET 3.5 y versiones anteriores (el segundo parámetro debe ser una cadena []). Ver la respuesta de Albin Sunnanbo. – Itison

0
public static string ToCommaString(this List<int> list) 
{ 
    if (list.Count <= 0) 
     return (""); 
    if (list.Count == 1) 
     return (list[0].ToString()); 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(list[0].ToString()); 
    for (int x = 1; x < list.Count; x++) 
     sb.Append("," + list[x].ToString()); 
    return (sb.ToString()); 
} 

public static List<int> CommaStringToIntList(this string _s) 
{ 
    string[] ss = _s.Split(','); 
    List<int> list = new List<int>(); 
    foreach (string s in ss) 
     list.Add(Int32.Parse(s)); 
    return (list); 
} 

Uso:

String s = "1,2,3,4"; 
List<int> list = s.CommaStringToIntList(); 
list.Add(5); 
s = list.ToCommaString(); 
s += ",6"; 
list = s.CommaStringToIntList(); 
+0

¿Por qué publicaste esta solución alternativa, cuando ya se habían dado algunas soluciones muy compactas que utilizaban string.Join()? –

Cuestiones relacionadas