Visual Studio International Packが正式公開されましたね。早速遊んでいる方も多いようです。
さて、通常、たとえば整数を16進数表記にする場合、
int i = 10;
string s = i.ToString( "x08" );
なんてコードで可能ですね。
では、International Pack の書式 "L" を使って漢字にしてみましょう。
int.ToString は IFormatProvider を引数に取れるので、こうですね。
int i = 10;
string s = i.ToString( "L", new EastAsiaNumericFormatter() );
…違います。
できてもよさそうなものなのですが、int.ToString の第2引数に渡せる IFormatProvider 実装は、CultureInfo か NumberFormatInfo だけです。それ以外は無視されます。
既にあちこちでサンプルが書かれていますが、こうしなければなりません。
int i = 10;
string s = string.Format( new EastAsiaNumericFormatter(), "{0:L}", i );
なんだかなぁ…
このような制限があるために、組み込みの整数型に対しては、IFormatProvider 実装クラスを自作しても、string.Format にパースできない形式の書式指定文字列を使うことができません。
お願いです。
IFormattable を実装するクラスを作るときは、FormatProvider を最大限尊重してあげてください。