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

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

  •  03-10-2019
  •  | 
  •  

Вопрос

Я часто использую 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);
Это было полезно?

Решение

Как насчет:

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. Просто объявляйте второй параметр как парамирай, и вы хороши, чтобы пойти!

Да, вы можете сделать метод расширения с именем 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) ...
}

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

static void FormatString(string myString, params string[] format)
{
     Console.WriteLine(String.Format(myString, format));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top