创建了自己的数字类型(实际上是DoubleDouble)后,我想实现IFormattable接口(interface)。因此,我必须以某种方式解析格式字符串。

public string ToString(string format, IFormatProvider formatProvider) {
    // formatting string according to format and using formatprovider?
    return formattedString;
}

该类的用户应该可以使用它代替double(或任何其他数字格式)。
String.Format("{0:0.##}", (DoubleDouble)123.4567);

我的问题是,是否有人知道有关此的很好的教程,或者可以给我一些提示?
在此过程中如何支持本地化?

如何解析格式字符串?是否有一些方法可以帮助完成此任务,或者我必须借助regexp之类的“手”来完成所有这些工作?

我确实在寻找帮助,但找不到任何帮助,如果您发现另一种可能会有所帮助的语言(C,C++),请告诉我。

最佳答案

MSDN具有Temperature类的nice example,该类以自己的自定义格式实现IFormattable接口(interface)。

我想你已经知道了;无论如何,今天我了解到,如果您的DoubleDouble类实现了IFormattable接口(interface),则:

String.Format("{0:0.##}", (DoubleDouble)123.4567);

...将使用特定格式DoubleDouble作为第一个参数调用ToString(...)类的"0.##"实现,我怀疑这与您想要的很接近。不过,您仍然必须解析格式的那部分。

我可能会猜测很多格式解析都嵌入在高度优化的.Net库二进制文件中,因此您不会得到任何自定义的解析虚拟方法来提供帮助。

09-27 02:12