Я думаю, что ближе всего вы получите индексированный формат:
String.Format("{0} has {1} quote types.", "C#", "1");
Существует также String.Replace (), если вы хотите сделать это в несколько шагов и поверить, что вы не найдете свои «переменные» где-либо еще в строке:
string MyString = "{language} has {n} quote types.";
MyString = MyString.Replace("{language}", "C#").Replace("{n}", "1");
Расширение для использования списка:
List<KeyValuePair<string, string>> replacements = GetFormatDictionary();
foreach (KeyValuePair<string, string> item in replacements)
{
MyString = MyString.Replace(item.Key, item.Value);
}
Вы также можете сделать это с помощью Dictionary , перебирая его коллекции .Keys, но используя List >, мы можем воспользоваться преимуществом метода List .ForEach () и сжать обратно на однострочник:
replacements.ForEach(delegate(KeyValuePair<string,string>) item) { MyString = MyString.Replace(item.Key, item.Value);});
Лямбда была бы еще проще, но я все еще на .Net 2.0. Также обратите внимание, что производительность .Replace () не является звездной при многократном использовании, поскольку строки в .Net являются неизменяемыми. Кроме того, для этого необходимо, чтобы переменная MyString
была определена таким образом, чтобы она была доступна делегату, поэтому она еще не идеальна.