2012-04-27 20 views
9

he intentado hacer una cadena como esta:string.Format con string.join

[1][2][3][4][5][6][7][8][9][10] 

Con este código:

string nums = "[" + string.Join("][", Enumerable.Range(1, 10)) + "]"; 

Eso, sin embargo en realidad no se ven muy bien, así que se preguntaba si podía combinar con string.Format string.join, sorta como esto:

string num = string.Join("[{0}]", Enumerable.Range(1, 10)); 

Así que envuelve algo alrededor de cada artículo, sin embargo, que termina así:

1[{0}]2[{0}]3[{0}]4[{0}]5[{0}]6[{0}]7[{0}]8[{0}]9[{0}]10 

¿Hay una manera mejor/más fácil de hacer esto?

Edit: Gracias chicos por todas las soluciones. Debo decir que prefiero este

string s = string.Concat(Enumerable.Range(1, 4).Select(i => string.Format("SomeTitle: >>> {0} <<<\n", i))); 

Durante este

string s2 = "SomeTitle: >>>" + string.Join("<<<\nSomeTitle: >>>", Enumerable.Range(1, 4)) + "<<<\n"; 

Debido a que todo el formato se realiza en una cadena, no en múltiple.

+1

¿Por qué su solución anterior no es buena? ¡Me parece perfecta! :) –

Respuesta

19
string.Concat(Enumerable.Range(1,10).Select(i => string.Format("[{0}]", i))) 
+3

Solo una nota al margen: esto funciona solo en framework> = 4. Para las versiones anteriores, necesitas convertir el argumento Concat en una matriz, por ejemplo, agregar '.ToArray()' – digEmAll

1

usted está probablemente en busca de una solución LINQ como

string nums = String.Concat(Enumerable.Range(1, 10) 
             .Select(i => string.Format("[{0}]", i))) 

Disculpas por el formato atroz.

Editar:String.Join reemplazado con String.Concat después de ser recordado por la respuesta de derrochador.

1

que acababa de concatenar cada elemento, y el uso de String.Concat ponerlos juntos:

string num = 
    String.Concat(
    Enumerable.Range(1, 10).Select(n => "[" + n + "]") 
); 

Si usted desea conseguir la suposición, se puede hacer una combinación cruzada entre los números y una matriz de cadenas . :)

string num = 
    String.Concat(
    from n in Enumerable.Range(1, 10) 
    from s in new string[] { "[", null, "]" } 
    select s ?? n.ToString() 
); 
1
StringBuilder str = new StringBuilder(); 
for (int i = 1; i <= 10; i++) 
str.AppendFormat("[{0}]", i); 

Console.WriteLine(str.ToString()); 

Mi recomendación es usar StringBuilder para anexar mismo patrón.

11

Última respuesta: Yo quería algo como esto, pero con la posibilidad de ingresar un formato de cadena y un separador. Así que esto es lo que ocurrió:

public static string JoinFormat<T>(this IEnumerable<T> list, string separator, 
            string formatString) 
{ 
    formatString = string.IsNullOrWhiteSpace(formatString) ? "{0}": formatString; 
    return string.Join(separator, 
         list.Select(item => string.Format(formatString, item))); 
} 

Ahora usted podría hacer una lista como

[1], [2], [3], [4], [5], [ 6], [7], [8], [9], [10]

ingresando numbers.JoinFormat(", ", "[{0}]").

Considerando que una solución Concat con "[{0}],") tendría una coma al final.

Un separador vacío o null produce su lista.