关于物体之间的关系可以做任何假设吗.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)吗?是否有默认的区域性或格式提供程序来维护该映射?或者两者之间没有必要的关系?

关于物体之间的关系可以做任何假设吗.ToString()和IFormattable.ToString(字符串,IForm

根据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文档仔细检查它,看看nulls是否确实指示了这两个参数的默认值。

参数

格式化

要使用的格式。

-或-

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

formatProvider

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

-或-

一个null引用(在Visual Basic中为Nothing),用于从操作系统的当前区域设置中获取数字格式信息。