我正在为聚合记录编写一些字符串输出格式代码(比如CSV格式输出)。我试图编写它,以便它能够通过IFormattable.ToString(string, IFormatProvider)接口利用许多类型的内置字符串格式化功能,以及简单的object.ToString()。
为了减少代码重复,最好能够对object.ToString()和IFormattable.ToString(string, IFormatProvider)之间的关系做出一些假设。
例如,是否可以依赖于假定ToString() == ToString(null, null)?是否存在维护该映射的默认区域性或格式提供程序?还是两者之间没有必要的关系?
发布于 2015-12-11 19:55:35
根据MSDN文档和.NET源代码,您可以假设对于内置类型,ToString()等同于ToString(null, null)和ToString("G", null)。
在MSDN上的.NET框架中的格式化类型中有关于它的一些信息。
例如,根据该站点的Int32.ToString()
调用
Int32.ToString("G", NumberFormatInfo.CurrentInfo)来格式化当前区域性的Int32值。
如果您检查源代码,您将注意到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确实指示这两个参数的默认值。
参数 格式化 要使用的格式。 -或者- 空引用( Visual中为Nothing),用于使用为IFormattable实现的类型定义的默认格式。 formatProvider 用于格式化值的提供程序。 -或者- 空引用( Visual中为Nothing),用于从操作系统的当前区域设置中获取数字格式信息。
https://stackoverflow.com/questions/34230566
复制相似问题