C#语言学习笔记18 —— 字符串格式化要点

boyanx2周前技术教程4

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 的字符串格式化的功能丰富,但符号众多,不好记忆,需要频繁查阅文档。

标签: css 格式化

相关文章

前端网页制作DIV+CSS布局介绍

什么是DIV?  DIV是层叠样式表中的定位技术,全称DIVision或叫做划分。在网站制作中DIV元素一般是用来为HTML文档内大块(block-level)的内容提供结构和背景的元素。当使用DIV...

前端基础知识之“CSS是什么?”

“这里是云端源想IT培训,帮你轻松拿offer”嗨~大家好,我是学长今天的你过得还好吗?- 2023.03.07 -女神节到了,所有的女孩都好看,愿我们成为自己的阳光,不需借谁的光!上期给大家分享了关...

零基础入门前端之:html是什么

云端源想云端源想it培训,帮你轻松拿offer”嗨~大家好,我是学长今天的你过得还好吗?- 2023.03.03 -一、HTML是什么?HTML ,全称“Hyper Text Markup Langu...

电脑重装系统u盘怎么制作

如果电脑出现卡顿,不流畅的情况,只要一键重装系统就行了,但是如果电脑出现黑屏、蓝屏,无法开机,应该怎么解决呢?下面小编教你如何制作电脑重装系统用的U盘启动盘。电脑重装系统u盘怎么制作1、首先准备好一个...

HTML&CSS基础学习笔记1.8-预格式文本

今天的内容比较简单轻松,毕竟是周末嘛,好好玩耍吧~言归正传,看看今天要讲的预格式吧<pre>标签的主要作用是预格式化文本。被包围在 pre 标签中的文本通常会保留空格和换行符。而文本也会呈...

MFC转QT - Qt界面开发 - 常用控件

基础控件 (QPushButton, QLabel, QLineEdit等)按钮控件族Qt提供了丰富的按钮控件,比MFC的按钮控件更加细分和功能丰富。QPushButton(标准按钮) // 创建按钮...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。