网站首页 > 文章精选 正文
C# 字符串格式化要点
字符串格式化(formatting,姑且这么翻译)是把数据(类实例、结构体实例或枚举值等)转化为一个代表字符串(string representation)的过程。这个字符串一般用来向用户显示,或用于保存供以后再读取(deserialize)出来。
基本机制是 Object.ToString,这是系统的默认实现。 同时,.NET 又提供了其它方式,用来修改或增强原来的实现,主要有以下几种方式:
- 重载 Object.ToString 方法
- 使用格式说明符( format specifiers)
- 使用格式提供程序(format providers)的特定区域性(culture)
- 实现 IFormattable 接口
- 使用复合格式化(composite formatting)
- 使用字符串内插(string interpolation)
- 实现接口 ICustomFormatter 和 IFormatProvider
Object.ToString 默认返回值是类型的名称。
基元(primitive)值类型的 ToString 方法已重写为显示对象值(而不是对象名称)。 并大都提供额外的 ToString 重载,有参数 IFormatProvider 和(或) 格式化字符串( format specifiers)。
基元(primitive)值类型主要指整数类型、浮点数、Decimal、Boolean、Char、日期时间类型、GUID 等。
格式字符串
对象的值通常具有多种表示形式。 例如:整数值 10 可以表示为多种形式,包括 10、10.0、1.0e01 或 $10.00。
.NET 使用格式字符串。 格式字符串是包含一个或多个预定义格式说明符的字符串,这些格式说明符是单一字符或字符组,用于定义 ToString 方法应如何设置其输出格式。
格式字符串是按对象的类型分类的,数值类型的格式化字符和日期时间的格式化字符是两码事,同一个字符意思完全不相同。
对于数值类型、日期时间类型、TimeSpan,有标准和自定义两种。枚举类型也有它的格式字符串。
格式字符串的格式说明符太多了,去查看官方文档吧!
下面为 C# Interactive 窗口代码片段
宽度指定
宽度部分(Width component 宽度组件,可选)
如果实际长度大于width,则width被忽略。width 正数,右对齐;width 负数,左对齐。
下面为代码片段
区域文化指定
格式化的结果还受到系统区域文化设置的影响。
区域文化指定,默认值
CultureInfo.CurrentCulture。
需要文化独立时,可使用 InvariantCulture。
下面为 C# Interactive 窗口代码片段
字符串内插(String interpolation)和 复合格式设置(Composite formatting)异同
语法上不一样,但有相同的部分。分别为 {expression[,width][:formatString]} 和 {index[,width][:formatString]}。
一个使用表达式,另一个使用参数列表索引号。
宽度(width)和格式化字符串(formatString),都有这两部分,均为可选项。这两部分的功能都一样。
花括号{}是语法的一部分,如果作为输出,需要转义。
字符串内插是较新的语法,更容易阅读。复合格式设置的语法一开始就有。
字符串内插(String interpolation)
语法为 {expression[,width][:formatString]}。
对于表达式(expression)部分, 如果值为 null,返回string.Empty;如果值不为 null,典型地,返回对象的 ToString 方法。
如果要包含 "{" 或 "}",指定 "{{" 或 "}}"。
使用条件操作符 ?: 时,要加上括号。
$@"..." 和 @#34;..." 都是合法。
下面为 C# Interactive 窗口代码片段
复合格式设置(Composite formatting)
语法为 {index[,width][:formatString]}。
常使用于以下方法中
- String.Format
- StringBuilder.AppendFormat
- Console.WriteLine
- TextWriter.WriteLine,派生类 StreamWriter, HtmlTextWriter
- Debug.WriteLine
- Trace类TraceError,TraceInformation,TraceWarning
- TraceSource.TraceInformation
格式化项,如{0},{1},{2}等,从0开始编号。
格式化项编号可以重复出现,如"0x{0:X} {0:E} {0:N}"。出现次序可以任意,如"{1} {0} {2}"。
下面为 C# Interactive 窗口代码片段
重载 Object.ToString 方法 和实现 IFormattable 接口
重载 Object.ToString 方法 和实现 IFormattable 接口,能让自定义类更方便地格式化为字符串。
下面是个例子,代码功能完整,但需要补充为完整程序下才能运行。
结束语
.NET 的字符串格式化的功能丰富,但符号众多,不好记忆,需要频繁查阅文档。
- 上一篇: 为什么前端老觉得后端简单?
- 下一篇: C# 字符串的基本用法
猜你喜欢
- 2025-05-22 一个基于C#开发的Excel转Json工具
- 2025-05-22 在C++中,如何避免出现Bug?
- 2025-05-22 C#内插字符串:一种让代码更美观的方式
- 2025-05-22 Google Docs 为代码块添加了14种新的编程语言支持
- 2025-05-22 Cobalt Strike 4.8 用户指南-第五节-获取初始访问
- 2025-05-22 C#语言编程案例-颜色码数制转换
- 2025-05-22 ASP.NET Core Web API 中的 JSON 修补程序
- 2025-05-22 C#知识|对象序列化与反序列化
- 2025-05-22 全网最全95道MongoDB面试题1万字详细解析
- 2025-05-22 透视CobaltStrike(二)—从CS到免杀框架Veil
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)