私はSystem.IFormattable
インターフェイスを実装するクラスを持つAPIを作成しています。実装の詳細を理解するために、mscorlibの既存のIFormattable
構造体についていくつかのテストを行いました。両方の方法は、単に文字列"ABC"
を返さ呼び出し、代わりに、認識できない形式の文字列の例外をスローのSystem.IFormattable.Format(...)の実装は例外をスローする必要がありますか?
string s1 = int.MaxValue.ToString("ABC", CultureInfo.CurrentCulture);
string s2 = DateTime.Now.ToString("ABC", CultureInfo.CurrentCulture);
:私は次のコードを実行した結果に驚きました。
私は試してみてください。
string s3 = int.MinValue.ToString("ABC", CultureInfo.CurrentCulture);
それは"-ABC"
を返し
をこの予期しない動作の原因であり、それはすべてのIFormattable
のクラスのために従わなければならないパターンである何(?!?!)?
明らかに、定義済みの書式指定子でない文字は、文字列として 'ToString'の出力にコピーされます。フォーマット指定子も{0}のようなプレースホルダーもない場合は、数字のないリテラル文字だけが表示されます。しかし、残りの書式文字列とは無関係に、負の数のマイナス記号が常に出力に表示される理由はわかりません。 '.ToString(" A ")'のような単一のリテラルがなぜ例外につながるのかもわかりません。 –
一部のタイプでは、フォーマット文字列はリテラルテキストとプレースホルダを組み合わせたもので、原則的には便利な機能です。しかし、私は将来、新しいプレースホルダーを追加することができないため、「すべての未知の文字は文字通りです」ルールのファンではありません。 – CodesInChaos