String.Format
empfängt ein Zeichenfolgenargument mit format
Wert und ein params object[]
Array, das mit einem beliebig großen Wert Elemente behandeln kann.
Für jeden object
Wert, dann ist es .ToString()
Verfahren, das Formatmuster zu lösen genannt wird
EDIT: Scheint ich Ihre Frage falsch verstanden. Wenn Sie wissen möchten, wie viele Argumente für Ihr Format erforderlich sind, können Sie entdecken, dass durch einen regulären Ausdruck:
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
Wie Benjamin in den Kommentaren erwähnt, vielleicht brauchen Sie Anzahl der verschiedenen Referenzen kennen. Wenn Sie nicht Linq verwenden, hier gehen Sie:
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 auch Adresse @280Z28 letztes Problem entdeckt.
Bearbeiten von 280Z28: Dies wird die Eingabe nicht bestätigen, sondern für jede gültige Eingabe wird die richtige Antwort geben:
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;
Dies ist nicht einfach. Was versuchst du zu erreichen? Es gibt fast sicher einen besseren Weg. – Auraseer