¿Hay una manera de reducir el nivel de detalle de la utilización de String.Format (..., p1, p2, p3)?
-
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);
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));
}