2008-12-08 26 views
6

Duplicar: String output: format or concat in C#?

Especialmente en C# usando String.Format mundo por todo lo que es realmente común, normalmente como VB.NET desarrollador menos que tenga que * No String.Format,String.Format or Not?

prefiero normales concatenación de cadenas, tales como:

V1 = V2 & "test-x" & V3 & "-;" 

para mí es mejor que esto:

V1 = String.Format("{0} test-x {1} -;", V2, V3) 

¿Me estoy perdiendo algo? ¿O es solo una preferencia personal?

razones para usar String.Format (De las respuestas) (Voy a tratar de mantener esta situación hasta la fecha)

  • localización es mucho más fácil si se utiliza cuerdas Formato
  • obviamente, es más fácil cambiar el formato de entrada de
  • es más legible (sin embargo, esto es personal)
  • mejor rendimiento

** A veces tengo que cambiar el estilo o la sustitución de las cosas de forma dinámica a continuación, utilizo String.Format *

Respuesta

14

Si alguna vez va a localizar su aplicación (y es a menudo difícil de descartar eso al comienzo), entonces String.Format debe ser mucho más preferido, por dos razones:

  1. Sólo tiene una cadena literal para traducir
  2. puede cambiar el orden de los valores, que puede hacer más se nse en otro idioma.
+0

es una buena razón para ir con String.Format, gracias por señalar esto. –

+0

"Puedes cambiar el orden de los valores" - ¿Cómo te va a ayudar eso en otro idioma? – Tomalak

+0

Primero me viene a la cabeza: Direcciones, formateadas de diferentes maneras en todo el mundo (por ejemplo, zip primero, luego city - o viceversa) ... –

0

Personalmente encuentro que String.Format es más fácil de leer, la cadena se presenta como un texto consecutivo . Sin embargo, depende de cuántos parámetros hay, si necesita buscar el parámetro correcto para comprenderlo, entonces ...

3

Buen artículo aquí por Karl Seguin: code better - use string.format explicando algunos de los beneficios.

+1

así que básicamente sólo se ve mejor :) o legible por la que se reduce a la preferencia personal, ¿no? –

1

El primer método es muy difícil de leer y aún más aburrido de escribir. Además, una vez que empiezas a hacer muchas de esas concatenaciones, hay consideraciones de rendimiento para pensar.

+0

Pensé que eran exactamente iguales, ¿hay algún problema de rendimiento real? –

+0

Sí. Como las cadenas son inmutables en .NET, cada concatenación crea una nueva cadena que el GC debe recopilar. El enfoque de string.Format es completamente diferente (más parecido a StringBuilder). – TToni

+0

cosas buenas, aprendí algo nuevo hoy. –

1

Si realmente está formateando valores ({0: d} etc.), String.Format es mucho mejor para leer que la concatenación de cadenas.

1

Para mí depende de los contenidos. La concatenación de cadenas crea objetos de cadena adicionales (porque strings are immutable in .NET), aunque principalmente es un problema de legibilidad.

A veces se complica cuando se desea colocar caracteres de nueva línea en una cadena, en cuyo caso, tiendo a usar algo como:

StringBuilder.AppendLine(string.Format("Some text {0}.", "here")); 
+0

Mal ejemplo - use AppendFormat en su lugar, luego AppendLine sin argumentos. –

+0

Ya sabe, puede hacer una buena observación: nunca he podido elegir la "mejor" forma de utilizar los métodos StringBuilder.AppendLine/AppendFormat. Realmente me gustaría un método AppendLineFormat. :) ¿Quiere decir esto: body.AppendFormat ("Ths {0}", "sfdsf"). AppendLine(); –

+0

@Neil: Sí, aunque generalmente también lo convertiría en una declaración separada, a menos que esté haciendo un montón * de esto. –

0

Creo que es más una cuestión de preferencia. Sin embargo, una vez que comencé a usarlo regularmente, la mayoría de mi equipo hizo lo mismo. Cuando lo discutimos, se acordó que es más fácil de entender y leer.

5

Todo el mundo ha publicado acerca de cómo string.format legible es (lo cual acepto, y tiene ref nulo e internacionalización beneficia sí), pero nadie ha mencionado que es considerablemente más lento que sencilla concatenación de cadenas (pequeño número de elementos) o usando StringBuilder (gran cantidad de concats).

Si el rendimiento importa o si está realizando una gran cantidad de operaciones (por lo que el rendimiento pronto será asunto), entonces debe evitar el formato.

Editar: Las referencias a lo solicitado;)

http://msmvps.com/blogs/jon_skeet/archive/2008/10/06/formatting-strings.aspx

http://blog.briandicroce.com/2008/02/04/stringbuilder-vs-string-performance-in-net/

+0

No dudes en consultar http://msmvps.com/blogs/jon_skeet/archive/2008/10/06/formatting-strings.aspx en tu respuesta :) –

+0

¡Ja! Ese mismo artículo es lo que me hizo compararlo un par de meses atrás. Los nombres son olvidable pero el contenido es recordado. – annakata