Как реализовать myMethod() с подписью Format («blah {0}», someValue), подобной string.format

#c# #.net #string #arguments #string-formatting

#c# #.net #строка #аргументы #форматирование строки

Вопрос:

Строка.Format и StringBuilder (через метод AppendFormat) позволяют вызывающим устройствам передавать значения в строку, которую они подготовили, например:

 string temp = string.Format("Item {0} of {1}, Record Id: {2} started...",
  itemCounter.ToString(),
  totalItemsToProcess.ToString(),
  myRecord.RecordId);
MyMethod(temp);
  

Но вместо того, чтобы создавать строку и передавать ее в «myMethod ()», я бы предпочел перегрузку, которую люди называют следующим образом:

 MyMethod("Item {0} of {1}, Record Id: {2} started...",
  itemCounter.ToString(),
  totalItemsToProcess.ToString(),
  myRecord.RecordId);
  

Как бы вы это реализовали?
Есть ли что-то, что я могу использовать, или мне нужно написать кучу пользовательского кода?

Комментарии:

1. Зачем вам нужен myMethod? Я думаю, string.format более понятен…

2. Зачем изобретать велосипед?

3. #ArsenMkrt, myMethod() — это чисто псевдокод. Мне нужно предоставить метод, который принимает то, что в основном является строкой, но большую часть времени в него будет загружаться разнообразная информация. Разрешение вызывающим пользователям использовать строку.перегрузка типа format упрощает использование и делает остальной код более чистым.

4. #V4Vendetta, для простоты использования и для очистки кода. Кстати, я бы счел это не слишком отличающимся от метода AppendFormat() в StringBuilder — который, я предполагаю (с величайшим уважением), вы бы не назвали переосмыслением?

5. Интересное наблюдение: в коде вопроса я никогда не говорил, что myMethod() возвращает что-либо, но во всех примерах кода myMethod возвращает строку. Не критика — просто интересно 🙂

Ответ №1:

Это довольно тривиально, но есть менее тривиальные варианты использования параметров:

 static string MyMethod( string format, params object[] paramList )
{
    return string.Format(format, paramList);
}
  

Комментарии:

1. Спасибо за пример. Это параметры; моя благодарность другим, кто предоставил ссылки 🙂

Ответ №2:

Как насчет параметров? http://msdn.microsoft.com/en-us/library/w5zay9db.aspx

Комментарии:

1. Ах, в точку. Я знал, что есть простой способ.

Ответ №3:

Посмотрите на параметры

Комментарии:

1. Извините, RedDeckWins — CharithJ поспорил с вами на 2 минуты.

2. Я ответил 44 минуты назад, что означает, что мой ответ был до ответа 38 или 42-минутной давности… если вы наведете курсор на «x минут назад», вы сможете увидеть время, когда это было опубликовано.

Ответ №4:

Вы можете создать метод и использовать String.Формат внутри, вероятно, что-то вроде этого:

 private void MyMethod(string separator, params string[] strings)
{
      string concatenatedString = String.Format(separator, strings);

      //More processing
}
  

Ответ №5:

Я не вижу причины, по которой вы хотите написать свой метод в этом случае, но вот как вы можете это сделать

 public string MyMethod(string s, params object[] args)
{
     return string.Format(s,args);
}