#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);
}