次の2行のコードがあります。
var BadResult = (100).ToString("B", new CustomFormatter ());
var GoodResult = String.Format("{0}", 100, new CustomFormatter ());
一方、BadResultは明らかに悪いものであり、GoodResultは良いものです。私のCustomFormatterクラスは次のように宣言されています:(また、私が関連していると感じる1つの関数を使用して):
public class CustomFormatter
: IFormatProvider, ICustomFormatter
{
public virtual Object GetFormat(Type formatType)
{
String formatTypeName = formatType.ToString();
formatTypeName = formatTypeName;
Object formatter = null;
if (formatType == typeof(ICustomFormatter))
formatter = this;
return formatter;
}
}
問題自体は、「良好な結果」でコード行を実行すると、GetFormat関数がCustomFormatterのインスタンスを要求しています。
Float.Tostring()で呼び出されると、NumberFormatInfoのインスタンスが必要になります。
私は最初に「私のCustomFormatterはNumberFormatInfoから派生しているはずです」にジャンプしました。残念ながら、クラスは封印されています。
だから: カスタムフォーマッターでFloat.ToString()を呼び出すことができるようにするには何をする必要がありますか?
ありがとう!