c# - String.Format - 它是如何工作的以及如何实现自定义格式字符串

标签 c# .net vb.net string string-formatting

使用 String.Format() 可以以许多不同的方式格式化例如 DateTime 对象。每次我寻找所需的格式时,我都需要在 Internet 上四处搜索。我几乎总能找到一个我可以使用的例子。例如:

String.Format("{0:MM/dd/yyyy}", DateTime.Now);          // "09/05/2012"

但我不知道它是如何工作的,也不知道哪些类支持这些“神奇”的附加字符串。

所以我的问题是:

  1. String.Format 如何将附加信息 MM/dd/yyyy 映射到字符串结果?
  2. 是否所有 Microsoft 对象都支持此功能?
    这在某处记录了吗?
  3. 是否可以这样做:
    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 也可用于捕获基本格式标准/默认值等。示例 herehere .

所以按顺序回答你的问题:

  1. 它在 DateTime 对象上使用 IFormattable 接口(interface)的 ToString() 方法,并传递 MM/dd/yyyy 格式字符串。正是该实现返回了正确的字符串。

  2. 任何实现IFormattable 的对象都支持此功能。您甚至可以自己编写!

  3. 是的,见上文。

关于c# - String.Format - 它是如何工作的以及如何实现自定义格式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512349/

相关文章:

c# - 访问 Swashbuckle swagger RootUrl/swagger/docs 不提供任何输出

C# LINQ - 将类的所有属性与同一类的不同实例进行比较的 Select 语句?

.net - 如何强制验证 Compact Framework 中的表单/控件?

vb.net - 取消异步任务的其他方法

javascript - 如何从 vb.net 代码调用 javascript 函数?

c# - 如何将一种对象类型的对象深度复制到共享继承结构的另一种对象类型

c# - 将接口(interface) B 的实现转换为接口(interface) A 的实现

c# - Moq 中的匹配设置问题

c# - 是否可以在 application_start 中使用 fluent migrator?

c# - 如何检测我的 .NET 程序集是从网站运行还是从桌面计算机运行?