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

Я часто использую 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 ответов

Решение

Как насчет:

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

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

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

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

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

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

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

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

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

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

static void FormatString(string myString, params string[] format)
{
     Console.WriteLine(String.Format(myString, format));
}
Другие вопросы по тегам