支持自定义数字类型的ToString(字符串格式)

Joh*_*Deo 8 c# string formatting tostring

创建了一个自己的数字类型(实际上DoubleDouble),我想实现该IFormattable接口.所以我必须以某种方式解析格式字符串.

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

该类的用户应该能够将其用作double(或任何其他数字格式)的替代品.

String.Format("{0:0.##}", (DoubleDouble)123.4567);
Run Code Online (Sandbox Code Playgroud)

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

如何解析格式字符串? 是否有一些方法可以帮助完成这项任务,或者我必须通过"手"与regexp等完成所有这些操作?

我真的寻找帮助,但找不到任何帮助,如果你找到其他语言(C,C++)的东西可能会有所帮助,请告诉我.

luk*_*san 0

在此过程中如何支持本地化?

像下面这样:

public string ToString(string format, IFormatProvider formatProvider)
{
  CultureInfo culture = formatProvider as CultureInfo;
  if (culture != null)
  {
    // Now you can do things like 
    // culture.NumberFormat.NumberDecimalSeparator, etc.
  }
}
Run Code Online (Sandbox Code Playgroud)

如何解析格式字符串?是否有一些方法可以帮助完成这项任务,或者我是否必须使用正则表达式等“手动”完成这一切?

.NET 框架中没有公共 API 可以为您完成此操作。如果您查看.NET 基元数值类型的实现的源代码IFormattable,它们最终都会调用外部方法,因此它们没有提供任何见解。您可能需要使用 RegEx 之类的东西来解析格式字符串。然后,您可以除以 的最大幂10来计算输出的第一位数字,减去该值,然后重复较小的幂,10直到生成所有数字。