2011-01-25 17 views
5

Duplicar posible:
C# String output: format or concat?¿Hay ventajas en el uso del formato de cadenas frente a la concatenación de cadenas?

¿cuál es la ventaja de utilizar este:

Console.WriteLine("{0}: {1}", e.Code, e.Reason); 

VS. esto:

Console.WriteLine(e.Code + ": " + e.Reason); 

????

+0

Es posible que desee ver en el código desensamblado para ver si hay una significativa diferencia de rendimiento. Yo personalmente prefiero el primero. – fardjad

+0

Estoy continuamente conmocionado por las personas que encuentran que los especificadores de formato * son más legibles * que las concatenaciones simples. No me digas que nunca los has escrito mal y que debes regresar y corregir un error por eso. Además, vea [esta entrada del blog] (http://geekswithblogs.net/BlackRabbitCoder/archive/2010/05/10/c-string-compares-and-concatenations.aspx). Como resultado, la concatenación simple ('+') es mejor para concatenar (conjuntos razonablemente pequeños), 'StringBuilder' es mejor cuando se necesita construir en un bucle, y' Format' es el mejor formateo. El beneficio de rendimiento de usar 'Format' sobre' + 'es ** insignificante en el mejor de los casos **. –

Respuesta

3

Para mí, los beneficios de la botonera de string.Format son:

  • mejorar la legibilidad
  • Mejor traducible

Desde una perspectiva de rendimiento, nunca hice ninguna medición; bien podría ser que la concatenación sea más rápida que el string.Format colgante.

3

Prácticamente, la única diferencia es que el primero permite controlar la disposición

string.Format("*{0:3}*",1); // * 1* 

o el control de formato:

string.Format("*{0:c}*",1); // *$1.00* 

El rendimiento de la concatenación se puede considerar al hacer un montón de que en los bucles apretados, en cuyo caso StringBuilder.Append y StringBuilder.AppendFormat son los más preferidos. AppendFormat y string.Format están muy cerca, en cuanto al rendimiento, por lo que no es necesario sustituir el segundo por el primero.

+0

El diseño se puede hacer a través de las numerosas sobrecargas ToString, a menudo aceptando un patrón –

+0

@Marc Pero siguiendo su ejemplo ..... – Will

4

La razón por la que siempre uso .Format() es por legibilidad y, en consecuencia, la reducción de errores y beneficios de mantenimiento. Por supuesto, esto no tiene sentido si eres relativamente nuevo en el código, ya que el segundo ejemplo es más intuitivo al principio. El primero parece innecesariamente complejo.

Sin embargo, si elige el segundo patrón, entonces comienza a tener problemas cuando tiene muchas variables. Aquí es donde es más fácil apreciar los beneficios del primer patrón.

por ejemplo

Console.Writeline(var1 + " " + var2 + "-" + var3 + 
" some sort of additional text" + var4); 

Nota el error: Necesito otro espacio después de "texto" pero eso no es fácil de ver en este ejemplo.

Sin embargo, si lo hago de otra manera:

Console.Writeline("{0} {1}-{2} some sort of additional text{3}", 
var1, var2, var3, var4) 

Es claro para ver lo que está pasando. Es más fácil apreciar el resultado final cuando se divide el formato de las variables que se van a usar.

Si queremos pensar aún más a largo plazo, entonces ayuda con la globalización/personalización. Si ponemos esas cadenas de formato en config, podemos cambiar el formato u orden de las variables sin tocar el código.

-2

Como las cadenas son inmutables (no se puede cambiar una cadena existente debe crear una nueva cada vez) el formato de cadena puede tener ventajas de rendimiento, ya que no creará tantas referencias de memoria.

result = string1 + " " + string2 + " " + string3

Esto crea 10 referencias

  • resultado
  • cadena1
  • string2
  • string3
  • ""
  • ""
  • cadena1 + ""
  • cadena1 + "" + cadena2
  • cadena1 + "" + cadena2 + ""
  • cadena1 + "" + cadena2 + "" + cadena de 3

result = string.Format("{0} {1} {2}", string1, string2, string3)

Esto crea referencias 5

  • resultado
  • cadena1 cadena2
  • string3
  • "{0} {1} {2}"
+2

El primero simplemente no es cierto; esa es una llamada a string.Concat, que mide todas las cadenas, asigna previamente el espacio correcto y las copia en. Sin cadenas intermedias. –

Cuestiones relacionadas