このAPIが存在する場合は、それについて考えてみましょう。目標は、フォーマット文字列を事前に検証して、String.Format
スローされないようにすることです。
有効なフォーマットスロットを含まない文字列は、有効なフォーマット文字列であることに注意してください-置換を挿入しようとしない場合。
->したがって、置き換えると予想される数または引数を渡す必要があります
さまざまな特殊なフォーマットパターンがあり、それぞれが特定のタイプに対して特定の意味を持っていることに注意してください:http: //msdn.microsoft.com/en-us/library/system.string.format.aspx
String.Format
引数の型と一致しないフォーマット文字列を渡してもスローされないように見えますが、そのような場合、フォーマッタは無意味になります。例えばString.Format("{0:0000}", "foo")
->したがって、このようなAPIは、引数のタイプも渡した場合にのみ本当に役立ちます。
すでにフォーマット文字列と型の配列を渡す必要がある場合(少なくとも)、基本的にはの署名にString.Format
なっているので、それを使用して例外を処理しないのはなぜですか?のようなものがあればいいのですString.TryFormat
が、私の知る限りではありません。
また、一部のAPIを介して事前検証してから、それ自体を再検証するString.Format
ことは、パフォーマンス的には理想的ではありません。
最もクリーンな解決策は、ラッパーを定義することだと思います。
public static bool TryFormat(string format, out string result, params Object[] args)
{
try
{
result = String.Format(format, args);
return true;
}
catch(FormatException)
{
return false;
}
}