Есть ли способ уменьшить многословность использования String.Format (...., p1, p2, p3)? - PullRequest
3 голосов
/ 05 мая 2010

Я часто использую String.Format(), потому что это делает построение строк более читабельным и управляемым.

Есть ли способ уменьшить синтаксическую детализацию, например, с помощью метода расширения и т. Д.*

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

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

например, я хотел бы использовать все мои и другие методы, которые получают строку, как я использую Console.Write(), например:

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

Ответы [ 5 ]

13 голосов
/ 05 мая 2010

Как насчет:

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

Теперь вы можете назвать это так:

Logger.LogEntry("text '{0}' registered", pair.IdCode);
4 голосов
/ 05 мая 2010

Если вы управляете методом Logger.LogEntry, вы можете просто добавить перегрузку, которая охватывает string.format. Просто объявите второй параметр как paramarray, и все готово!

2 голосов
/ 05 мая 2010

Да, вы можете создать метод расширения с именем FormatWith, который позволяет вам говорить что-то вроде:

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

Это должно быть достаточно легко, чтобы бросить свой собственный, но вот пример: http://james.newtonking.com/archive/2008/03/27/formatwith-string-format-extension-method.aspx

1 голос
/ 05 мая 2010

Если Logger.LogEntry - статический метод вне вашего контроля, то нет; Вы можете добавить только методы расширения к экземплярам. Если это ваш тип, вы можете добавить:

public static void LogEntry(string format, params object[] args) {
    ... string.Format(format,args) ...
}
0 голосов
/ 05 мая 2010

Вы можете использовать ключевое слово params, чтобы объединить все аргументы после первого аргумента в массив и передать этот массив в String.Format.

static void FormatString(string myString, params string[] format)
{
     Console.WriteLine(String.Format(myString, format));
}
...