Boolean 型のカスタム書式って欲しくない?

x.ToString("yes:no") ってすると x ? "yes" : "no" と同じ結果になるかんじで、string.Format("{0:yyyy'-'MM'-'dd}, {1:yes:no}", DateTime.Now, bool) とかして使いたい。*1
まあ、これそのものはカスタムフォーマットプロバイダを実装すれば簡単に実現できるんですけど、標準であってもよいよなーと思ったんです。プリミティブ型でカスタム書式が指定できない型って String と Boolean だけなので、String に指定できないのはよいとして、Boolean には作りようがなかったのかなー、と。
こうなっていれば、多国化するのに "yes" と "no" という文字列を Format の書式化文字列とまとめて保持できるんですよね。
bool 型の仕様要素を文字列化するだけなら、truestring と falsestring を単独の要素としてリソースに登録してても違和感ないんだけど、コンテキストヘルプなんかで現在状態を表示するのに「はい/いいえ」とか「オン/オフ」といった語を、ヘルプ文章というコンテキストなしにリソースとして登録していると、コンテキストとなるヘルプ文章との対応の管理が大変なんですよね。知らないうちに別の場所のリソースとして流用されていたりして。


ぜんぜん違う話題だけど、カスタムフォーマットプロバイダは作っておくと結構便利で、アプリケーションの開発段階において public static readonly IFormatProvider fp = ... といったかんじで作成して使いまわしておくと、案外助かるものです。
最終的には #if なりを使って public const IFormatProvider fp = null *2に置き換えるだけでカスタムフォーマットプロバイダを *コンパイル時に* 使わいように変更できますしね。*3

*1:Boolean.ToString(string truestring, string falsestring) というオーバーロードもいりますかね

*2:「参照型の定数」なんて、こんな使い方ぐらいしかありませんよね

*3:どうせ null 付与のメソッド呼びなおしなんて、実行時コストなんて 1ms の差もでないとおもいますが