使用 String.Format()
可以以许多不同的方式格式化例如 DateTime
对象。每次我寻找所需的格式时,我都需要在 Internet 上四处搜索。我几乎总能找到一个我可以使用的例子。例如:
String.Format("{0:MM/dd/yyyy}", DateTime.Now); // "09/05/2012"
但我不知道它是如何工作的,也不知道哪些类支持这些“神奇”的附加字符串。
所以我的问题是:
String.Format
如何将附加信息MM/dd/yyyy
映射到字符串结果?- 是否所有 Microsoft 对象都支持此功能?
这在某处记录了吗? - 是否可以这样做:
String.Format("{0:MyCustomFormat}", new MyOwnClass())
最佳答案
String.Format
将字符串中的每个标记({0}
等)与对应的对象进行匹配:https://learn.microsoft.com/en-us/dotnet/api/system.string.format#overloads
可选地提供格式字符串:
{ index[,alignment][ : formatString] }
如果提供了formatString
,相应的对象必须实现IFormattable特别是接受 formatString
并返回相应格式化字符串的 ToString
方法:https://learn.microsoft.com/en-us/dotnet/api/system.iformattable.tostring
IFormatProvider
也可用于捕获基本格式标准/默认值等。示例 here和 here .
所以按顺序回答你的问题:
它在
DateTime
对象上使用IFormattable
接口(interface)的ToString()
方法,并传递MM/dd/yyyy
格式字符串。正是该实现返回了正确的字符串。任何实现
IFormattable
的对象都支持此功能。您甚至可以自己编写!是的,见上文。
关于c# - String.Format - 它是如何工作的以及如何实现自定义格式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512349/