String.Format
riceve un argomento stringa con il valore format
e un array params object[]
, che può gestire elementi di valore elevato arbitrario.
Per ogni valore object
, è .ToString()
metodo sarà chiamato a risolvere quel modello formato
EDIT: Sembra ho letto male la tua domanda. Se volete sapere quanti argomenti sono necessari per il formato, si può scoprire che utilizzando un'espressione regolare:
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
Come Benjamin notato nei commenti, forse si ha bisogno di conoscere il numero di differenti riferimenti. Se non si utilizza Linq, qui si va:
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
questo indirizzo anche @280Z28 ultimo problema individuato.
Edit da 280Z28: Questo non convaliderà l'input, ma per qualsiasi input valido darà la risposta corretta:
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;
fonte
2010-01-28 17:27:40
Questo non è facile. Cosa stai cercando di realizzare? C'è quasi sicuramente un modo migliore per farlo. – Auraseer