String.Format
erhält ein String-Argument mit format
Wert, und ein params object[]
Array, das mit beliebig großen Werten umgehen kann.
Für jeden object
Wert, ist es .ToString()
Methode wird aufgerufen, um dieses Formatmuster aufzulösen
EDIT : Ich habe Ihre Frage anscheinend falsch verstanden. Wenn Sie wissen wollen, wie viele Argumente für Ihr Format erforderlich sind, können Sie das mit einem regulären Ausdruck herausfinden:
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
Als Benjamin in den Kommentaren erwähnt, müssen Sie vielleicht die Anzahl der verschiedene Referenzen. Wenn Sie nicht mit Linq arbeiten, hier ist es:
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
Dies gilt auch für @ 280Z28 letztes Problem erkannt.
Edit by 280Z28: Die Eingabe wird nicht validiert, aber für jede gültige Eingabe wird die richtige Antwort gegeben:
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;