【问题标题】:IFormatProvider In ICustomFormatterICustomFormatter 中的 IFormatProvider
【发布时间】:2013-11-25 23:31:04
【问题描述】:

我们希望像往常一样实现自定义格式化程序,最好使用 Microsoft 的接口,所以我找到了 ICustomFormatter。

http://msdn.microsoft.com/en-us/library/system.icustomformatter.format(v=vs.110).aspx

但是接口的签名提供了这个:

public string Format(string format, object arg, IFormatProvider formatProvider)
{

}

我什至会使用 formatProvider 做什么?我还没有看到个例子,说明你为什么担心什么 formatProvider 已经加载了这个 ICustomFormatter。

我发现的唯一例子是这样的:

http://www.codeproject.com/Articles/6533/Custom-String-Formatting-in-NET

if (formatProvider is NumberFormatInfo)
    if (((NumberFormatInfo)formatProvider).UseDiacritic)
        c = diacritic;

但这看起来就像糟糕的设计(获取一个接口,然后强耦合它)。

我错过了一些特殊的用例吗?

【问题讨论】:

  • IFormatProvider不是用来允许不同地区或文化中相同类型数据的不同格式吗?因此,例如,货币格式为 en-us 输出“$”,为 en-gb 输出“£”。
  • 这就是你需要知道的全部msdn.microsoft.com/en-us/library/…

标签: c# .net iformatprovider


【解决方案1】:

IFormatProvider 用于为您的自定义格式化程序提供特定于文化的和全局格式化信息。当然,根据您的自定义格式化程序的用途,您可能不需要任何此类信息,但如果您正在格式化货币或浮点数或日期,例如,那么您可能需要它。

【讨论】:

  • Welp,应该稍微戳一下 ILSpy 中 IFormatProvider 的派生类(特别是对于 DateTime)。
猜你喜欢
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多