¿Por qué usar String.Format? [duplicado]

¿Por qué alguien usaría en C# y VB .NET en lugar de los operadores de concatenación (en VB y en C#)?String.Format&+

¿Cuál es la principal diferencia? ¿Por qué todo el mundo está tan interesado en usar? Tengo mucha curiosidad.String.Format

Respuestas:7 Respuestas 7
Tiempo:hace 11 años, 8 meses
Última modificación:hace 2 años, 2 meses

Solución

Puedo ver una serie de razones:

Legibilidad

string s = string.Format("Hey, {0} it is the {1}st day of {2}.  I feel {3}!", _name, _day, _month, _feeling);

vs:

string s = "Hey," + _name + " it is the " + _day + "st day of " + _month + ".  I feel " + feeling + "!";

Especificadores de formato (y esto incluye el hecho de que puede escribir formateadores personalizados)

string s = string.Format("Invoice number: {0:0000}", _invoiceNum);

vs:

string s = "Invoice Number = " + ("0000" + _invoiceNum).Substr(..... /*can't even be bothered to type it*/)

Persistencia de la plantilla de cadena

¿Qué sucede si quiero almacenar plantillas de cadena en la base de datos? Con formato de cadena:

_id         _translation
  1         Welcome {0} to {1}.  Today is {2}.
  2         You have {0} products in your basket.
  3         Thank-you for your order.  Your {0} will arrive in {1} working days.

vs:

_id         _translation
  1         Welcome
  2         to
  3         .  Today is
  4         . 
  5         You have
  6         products in your basket.
  7         Someone
  8         just shoot
  9         the developer.

Otras respuestas

Primero, encuentro

string s = String.Format(
    "Your order {0} will be delivered on {1:yyyy-MM-dd}. Your total cost is {2:C}.",
    orderNumber,
    orderDeliveryDate,
    orderCost
);

mucho más fácil de leer, escribir y mantener que

string s = "Your order " +
           orderNumber.ToString() +
           " will be delivered on " +
           orderDeliveryDate.ToString("yyyy-MM-dd") +
           "." +
           "Your total cost is " +
           orderCost.ToString("C") + 
           ".";

Mira cuánto más mantenible es lo siguiente

string s = String.Format(
    "Year = {0:yyyy}, Month = {0:MM}, Day = {0:dd}",
    date
);

sobre la alternativa donde tendrías que repetir tres veces.date

En segundo lugar, los especificadores de formato que proporciona le brindan una gran flexibilidad sobre la salida de la cadena de una manera que es más fácil de leer, escribir y mantener que simplemente usar la concatenación antigua simple. Además, es más fácil acertar con las preocupaciones culturales con .String.FormatString.Format

En tercer lugar, cuando el rendimiento importa, superará a la concatenación. Detrás de escena utiliza un y evita el problema de Schlemiel el Pintor.String.FormatStringBuilder

Deja un comentario