string.Format has following method signature
string.Format(format, params, .., .. , ..);
I want to pass custom format each time like
string custFormat = "Hi {0} ... {n} "; // I only care about numbers here, and want avoid {abdb}
string name = "Foo";
string message = ProcessMessage(custFormat, name);
public string ProcessMessage(custFormat, name)
{
return string.Format(custFormat, name);
}
I want to validate the value in custFormat before passing to ProcessMessage to avoid exception.
Let’s think about this API, if it exists. The goal is to pre-validate a format string, to make sure
String.Formatwon’t throw.Note that any string which doesn’t contain a valid format slot is a valid format string – if you don’t try to insert any replacements.
-> So we would need to pass in the number or args we expect to replace
Note that there are tons of different specialty formatting patterns, each with a specific meaning for specific types: http://msdn.microsoft.com/en-us/library/system.string.format.aspx
Although it seems that
String.Formatwon’t throw if you pass a format string which doesn’t match your argument type, the formatter becomes meaningless in such cases. e.g.String.Format("{0:0000}", "foo")-> So such an API would be truly useful only if you passed the types of the args, as well.
If we already need to pass in our format string and an array of types (at least), then we are basically at the signature of
String.Format, so why not just use that and handle the exception? It would be nice if something likeString.TryFormatexisted, but to my knowledge it doesn’t.Also, pre-validating via some API, then re-validating in
String.Formatitself is not ideal perf-wise.I think the cleanest solution might be to define a wrapper: