可以对内置类型的object.ToString()和IFormattable.ToString(string,IFormatProvider)之间的关系做出任何假设吗?

时间:2015-12-11 18:51:33

标签: c# string iformattable

我正在为聚合记录编写一些字符串输出格式代码(想想CSV格式输出)。我试图编写它,以便它通过IFormattable.ToString(string, IFormatProvider)接口利用许多类型的内置字符串格式化功能,以及简单的object.ToString()

为了减少代码重复,能够对object.ToString()IFormattable.ToString(string, IFormatProvider)之间的关系做出一些假设会很好。

例如,是否可以依赖于假设ToString() == ToString(null, null)?是否有维护该映射的默认文化或格式提供程序?或两者之间没有必要的关系吗?

1 个答案:

答案 0 :(得分:1)

根据MSDN文档和.NET源代码,您可以假设内置类型ToString()等同于ToString(null, null)ToString("G", null)

MSDN上的Formatting Types in the .NET Framework中有一些相关信息。

例如根据该网站Int32.ToString()

  

调用Int32.ToString("G", NumberFormatInfo.CurrentInfo)格式化当前文化的Int32值。

如果您选中source code,则会发现ToString()来电

Number.FormatInt32(m_value, null, NumberFormatInfo.CurrentInfo);

String ToString(String format, IFormatProvider provider)调用

Number.FormatInt32(m_value, format, NumberFormatInfo.GetInstance(provider));

因此format实际上是null,而不是"G"。但是,它没有什么区别,因为"G"null应该是相同的。 NumberFormatInfo.GetInstance(null)返回NumberFormatInfo.CurrentInfo,因此Int32.ToString()相当于Int32.ToString("G", null)Int32.ToString(null, null)

您可以使用IFormattable.ToString文档仔细检查它,看看null确实指示了两个参数的默认值。

  

参数

     

格式

     

要使用的格式。

     

-OR -

     

使用为IFormattable实现类型定义的默认格式的空引用(在Visual Basic中为Nothing)。

     

formatProvider

     

用于格式化值的提供程序。

     

-OR -

     

从操作系统的当前语言环境设置中获取数字格式信息的空引用(在Visual Basic中为Nothing)。