String.Format
nhận đối số chuỗi có giá trị format
và một mảng params object[]
, có thể xử lý các mục có giá trị lớn tùy ý.
Đối với mỗi giá trị object
, đó là phương pháp .ToString()
sẽ được gọi để giải quyết rằng mẫu định dạng
EDIT: Có vẻ tôi không nhận định câu hỏi của bạn. Nếu bạn muốn biết có bao nhiêu đối số được yêu cầu phải định dạng, bạn có thể khám phá ra rằng bằng cách sử dụng một biểu thức chính quy:
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
Như Benjamin lưu ý trong các ý kiến, có thể bạn cần phải biết số tài liệu tham khảo khác nhau. Nếu bạn không sử dụng LINQ, tại đây bạn đi:
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
Đây cũng là địa chỉ @280Z28 vấn đề mới nhất được phát hiện.
Sửa bởi 280Z28: Điều này sẽ không xác nhận đầu vào, nhưng đối với bất kỳ đầu vào hợp lệ sẽ cho câu trả lời đúng:
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;
Nguồn
2010-01-28 17:27:40
Điều này không dễ. Bạn đang cố gắng để thực hiện? Có gần như chắc chắn là một cách tốt hơn để đi về nó. – Auraseer