¿Cuáles son los pros / contras (si los hay) para usar
string output;
int i = 10;
output = string.Format("the int is {0}", i);
versus
string output;
int i = 10;
output = "the int is " + i;
Siempre he usado el último ejemplo, pero parece que una buena mayoría de los tutoriales en línea usan el ejemplo string.format. No creo que haya diferencias reales en términos de eficiencia, mi pensamiento inicial es que un codificador no tiene que seguir rompiendo la cadena para insertar variables.
Respuestas:
Si considera que la traducción es importante en su proyecto, la primera sintaxis realmente lo ayudará.
Por ejemplo, puede tener:
También tenga en cuenta que sus variables pueden no estar siempre en el mismo lugar en la oración con esa sintaxis:
fuente
System.out.println($"{name} is {age} year's old.");
Vea la primera respuesta para /programming/4671610/why-use-string-format . En mi opinión, cubre todo por qué es mejor.
Además, cada ensamblado .NET tiene un grupo interno, que contiene una colección de cadenas únicas. Cuando se compila su código, todos los literales de cadena a los que hace referencia en su código se agregan a este grupo. Si tiene un código que se ve así:
Eso lo hace 2 cuerdas en la piscina.
Si usted tiene:
"the int is {0} and the double is {1}"
Solo tienes una cadena en el grupo.
Es un poco más complicado saber cuándo los Strings están internados y cuándo no porque el compilador tiene cierta inteligencia al detectar Strings que a veces no necesitan ser internados ... Consulte, por ejemplo, este artículo que brinda más información sobre esto importar.
Editar: después de desenterrar un poco, he encontrado una respuesta interesante a la pregunta ¿ Cuándo es mejor usar String.Format vs cadena de concatenación? . En resumen, el autor de la respuesta con +30 votos hace un argumento convincente a favor de la concatenación de cadenas cuando la localización no está involucrada.
fuente
Prefiero la primera manera porque me permite ver con precisión cómo se verá la cadena cuando salga. Es muy fácil olvidarse de agregar un espacio, o agregar un espacio extra cuando se agregan cadenas.
Estoy seguro de que también hay un beneficio de rendimiento en la primera forma debido a que no tiene que crear las cadenas adicionales; Pero esa no es mi principal preocupación.
fuente
Al usar la primera opción, puede almacenar una cadena de formato de uso común y reducir la escritura necesaria y facilitar la actualización de la cadena en todos los lugares donde se usa. Básicamente, la primera opción permite que DRY se implemente fácilmente. También es una sintaxis mucho mejor si es necesario utilizar múltiples variables en una cadena, como usted mencionó.
fuente
Creo
string.Format()
que es más fácil ver cuál será exactamente el resultado (para que no tenga problemas con espacios olvidados o algo así), y también es más fácil de escribir y modificar.Si desea hacer un formateo muy simple, usar el
+
operador más podría ser más fácil, pero tiendo a usarlo solo cuando concatene dos cadenas, no más.Para mostrar cómo
string.Format()
es más fácil de modificar, considere que desea agregar un punto final al final de la oración en su ejemplo: ir destring.Format("The int is {0}", i)
astring.Format("The int is {0}.", i)
es solo un carácter. Pero pasar de"the int is " + i
a"the int is " + i + '.'
es mucho más.Otra ventaja de esto
string.Format()
es que le permite especificar fácilmente el formato a usar, comostring.Format("The int is 0x{0:X}.", i)
. Esto es aún más importante al formatear la fecha.En cuanto a la eficiencia,
string.Format()
lo más probable es que sea más lento que las simples concatenaciones de cadenas. Pero es probable que un código como este no esté en una ruta activa, por lo que no importa. Y si lo hace, probablemente sea mejor usarloStringBuilder
.fuente
Use el que hace que su código sea más legible. No te preocupes por el rendimiento.
Para su ejemplo a continuación, prefiero B porque es más legible. Pero las traducciones de idiomas anteriores también tienen sentido. No dejes que nadie te obligue a usar cadenas. Formate, en su lugar, lee y señala el excelente blog de Jeff Atwoods en The Sad Tragedy of Micro Optimizations Theater
UNA:
versus
SI:
fuente
Ref: Salida de cadena: ¿formato o concat en C #?
Considera este código.
Es una versión ligeramente modificada de su código.
Esos son mis resultados:
fuente