String.Format
reçoit un argument de chaîne avec la valeur format
et un tableau params object[]
, qui peut gérer des éléments de grande valeur arbitraires.
Pour chaque valeur object
, il est la méthode .ToString()
sera appelée à résoudre ce modèle de format
EDIT: Semble J'ai mal lu votre question. Si vous voulez savoir combien d'arguments sont nécessaires à votre format, vous pouvez découvrir qu'en utilisant une expression régulière:
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
Comme Benjamin noté dans les commentaires, peut-être vous avez besoin de savoir nombre de différentes références. Si vous ne LINQ, ici vous allez:
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
Cette adresse également @280Z28 dernier problème repéré.
Modifier par 280Z28: Ce ne sera pas valider l'entrée, mais pour une entrée valide donnera la bonne réponse:
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;
Ce n'est pas facile. Qu'est-ce que vous essayez d'accomplir? Il y a presque certainement une meilleure façon de s'y prendre. – Auraseer