String.Format
получает строковый аргумент со значением format
и массив params object[]
, который может работать с произвольными элементами большого значения.
Для каждого значения object
будет вызван метод .ToString()
для разрешения этого шаблона формата
РЕДАКТИРОВАТЬ: Кажется, я неправильно понял ваш вопрос. Если вы хотите узнать, сколько аргументов требуется для вашего формата, вы можете узнать это с помощью регулярного выражения:
string pattern = "{0} {1:00} {{2}}, Failure: {0}{{{1}}}, Failure: {0} ({0})";
int count = Regex.Matches(Regex.Replace(pattern,
@"(\{{2}|\}{2})", ""), // removes escaped curly brackets
@"\{\d+(?:\:?[^}]*)\}").Count; // returns 6
Как отмечалось в комментариях Бенджамин , может быть, вам нужно знать количество различных ссылок. Если вы не используете Linq, вы идете:
int count = Regex.Matches(Regex.Replace(pattern,
@"(\{{2}|\}{2})", ""), // removes escaped curly brackets
@"\{(\d+)(?:\:?[^}]*)\}").OfType<Match>()
.SelectMany(match => match.Groups.OfType<Group>().Skip(1))
.Select(index => Int32.Parse(index.Value))
.Max() + 1; // returns 2
Это также адрес @ 280Z28 последняя обнаруженная проблема.
Редактировать с помощью 280Z28: это не подтвердит ввод, но для любого действительного ввода даст правильный ответ:
int count2 =
Regex.Matches(
pattern.Replace("{{", string.Empty),
@"\{(\d+)")
.OfType<Match>()
.Select(match => int.Parse(match.Groups[1].Value))
.Union(Enumerable.Repeat(-1, 1))
.Max() + 1;