首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于内置类型的object.ToString()和IFormattable.ToString(string,IFormatProvider)之间的关系,可以做任何假设吗?

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

Stack Overflow用户
提问于 2015-12-11 18:51:32
回答 1查看 91关注 0票数 1

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

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

例如,是否可以依赖于假定ToString() == ToString(null, null)?是否存在维护该映射的默认区域性或格式提供程序?还是两者之间没有必要的关系?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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()调用

代码语言:javascript
复制
Number.FormatInt32(m_value, null, NumberFormatInfo.CurrentInfo);

String ToString(String format, IFormatProvider provider)调用

代码语言:javascript
复制
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),用于从操作系统的当前区域设置中获取数字格式信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34230566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档