¿Hay una manera de reducir el nivel de detalle de la utilización de String.Format (..., p1, p2, p3)?

StackOverflow https://stackoverflow.com/questions/2774498

  •  03-10-2019
  •  | 
  •  

Pregunta

A menudo utilizan String.Format() porque hace que la construcción de cadenas más legibles y manejables.

¿Hay alguna forma de reducir su nivel de detalle sintáctico, por ejemplo, con un método de extensión, etc.?

Logger.LogEntry(String.Format("text '{0}' registered", pair.IdCode));

public static void LogEntry(string message)
{
    ...
}

por ejemplo. Me gustaría utilizar todas mis y otros métodos que reciben una cadena de la forma en que uso Console.Write(), por ejemplo:.

Logger.LogEntry("text '{0}' registered", pair.IdCode);
¿Fue útil?

Solución

¿Qué hay de:

static void LogEntry(string format, params object[] args) {
    Console.WriteLine(format, args); // For example.
}

Ahora se le puede llamar así:

Logger.LogEntry("text '{0}' registered", pair.IdCode);

Otros consejos

Si controlas el método Logger.LogEntry, sólo tiene que añadir una sobrecarga que abarca el string.format. Sólo declarar el segundo parámetro como un ParamArray y que son buenos para ir!

Sí, se puede hacer un método de extensión llamado FormatWith, lo que le permite decir cosas como:

Logger.LogEntry("I hate my {0}".FormatWith(itemName));

Debe ser lo suficientemente fácil de rodar su propio, pero aquí está un ejemplo: http://james.newtonking.com/archive/2008/03/27/formatwith-string-format-extension-method.aspx

Si Logger.LogEntry es un método estático fuera de su control, entonces no; sólo se pueden agregar a los métodos de extensión casos. Si es su tipo, habría que agregar:

public static void LogEntry(string format, params object[] args) {
    ... string.Format(format,args) ...
}

Se puede usar los parametros de palabras clave para combinar todos los argumentos después de que el primer argumento en una matriz y pasar esa matriz para String.Format.

static void FormatString(string myString, params string[] format)
{
     Console.WriteLine(String.Format(myString, format));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top