我正在为聚合记录编写一些字符串输出格式代码(想想CSV格式输出)。我试图编写它,以便它通过IFormattable.ToString(string, IFormatProvider)
接口利用许多类型的内置字符串格式化功能,以及简单的object.ToString()
。
为了减少代码重复,能够对object.ToString()
和IFormattable.ToString(string, IFormatProvider)
之间的关系做出一些假设会很好。
例如,是否可以依赖于假设ToString() == ToString(null, null)
?是否有维护该映射的默认文化或格式提供程序?或两者之间没有必要的关系吗?
答案 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)。