关于物体之间的关系可以做任何假设吗.ToString()和IFormattable.ToString(字符串,IForm
本文关键字:ToString IFormattable IForm 字符串 假设 之间 于物体 关系 任何 | 更新日期: 2023-09-27 18:26:24
我正在为聚合记录编写一些字符串输出格式化代码(想想CSV格式的输出)。我正在尝试编写它,以便它除了使用简单的object.ToString()
之外,还通过IFormattable.ToString(string, IFormatProvider)
接口利用许多类型的内置字符串格式化功能。
为了减少代码重复,最好能够对object.ToString()
和IFormattable.ToString(string, IFormatProvider)
之间的关系进行一些假设。
例如,可以假设ToString() == ToString(null, null)
吗?是否有默认的区域性或格式提供程序来维护该映射?或者两者之间没有必要的关系?
根据MSDN文档和.NET源代码,您可以假设对于内置类型,ToString()
等效于ToString(null, null)
和ToString("G", null)
。
MSDN上的.NET Framework中的格式化类型中提供了一些有关它的信息。
例如,根据该站点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
s是否确实指示了这两个参数的默认值。
参数
格式化
要使用的格式。
-或-
一个null引用(在Visual Basic中为Nothing),用于使用为IFormattable实现的类型定义的默认格式。
formatProvider
用于格式化值的提供程序。
-或-
一个null引用(在Visual Basic中为Nothing),用于从操作系统的当前区域设置中获取数字格式信息。