这几天多次用到Format 语句,代表的意思总容易忘记,这里记录一下
复合格式化 见 http://msdn.microsoft.com/zh-cn/library/txafckwd(v=VS.90).aspx
就是这样的,用占位符格式化
标准日期和时间格式字符串 http://msdn.microsoft.com/zh-cn/library/az4se3k1(v=VS.90).aspx
自定义日期和时间格式字符串 http://msdn.microsoft.com/zh-cn/library/8kb3ddd4(v=VS.90).aspx
标准数字格式化字符串 http://msdn.microsoft.com/zh-cn/library/dwhawy9k(v=VS.90).aspx
自定义数字格式化字符串 http://msdn.microsoft.com/zh-cn/library/0c899ak8(v=VS.90).aspx
String.Format("Name = {0}, hours = {1:hh}", myName, DateTime.Now);
固定文本为“Name = ”和“, hours = ”。格式项为“{0}”和“{1:hh}”,前者的索引为 0,对应于对象 myName,后者的索引为 1,对应于对象 DateTime.Now。
每个格式项都采用下面的形式并包含以下组件: { 索引[,对齐][:格式字符串]} 必须使用成对的大括号(“{”和“}”)。
索引组件
强制“索引”组件(也叫参数说明符)是一个从 0 开始的数字,可标识对象列表中对应的项。 也就是说,参数说明符为 0 的格式项列表中的第一个对象,参数说明符为 1 的格式项列表中的第二个对象,依次类推。
通过指定相同的参数说明符,多个格式项可以引用对象列表中的同一个元素。例如,通过指定类似于“{0:X} {0:E} {0:N}”的复合格式字符串,可以将同一个数值设置为十六进制、科学记数法和数字格式。
每个格式项都可以引用列表中的任一对象。例如,如果有三个对象,则可以通过指定类似于“{1} {0} {2}”的复合格式字符串来设置第二、第一和第三个对象的格式。格式项未引用的对象会被忽略。如果参数说明符指定了超出对象列表范围的项,将导致运行时异常。
对齐组件
可选的“对齐”组件是一个带符号的整数,指示首选的设置了格式的字段宽度。 如果“对齐”值小于设置了格式的字符串的长度,“对齐”会被忽略,并且使用设置了格式的字符串的长度作为字段宽度。 如果“对齐”为正数,字段中设置了格式的数据为右对齐;如果“对齐”为负数,字段中的设置了格式的数据为左对齐。 如果需要填充,则使用空白。如果指定“对齐”,就需要使用逗号。
格式字符串组件
可选的“格式字符串”组件是适合正在设置格式的对象类型的格式字符串。 如果相应对象是数值,则指定数字格式字符串,如果相应对象是 DateTime 对象,则指定日期和时间格式字符串,或者如果相应对象是枚举值,则指定枚举格式字符串。如果不指定“格式字符串”,则对数字、日期和时间或者枚举类型使用常规(“G”)格式说明符。 如果指定“格式说明符”,需要使用冒号。
转义大括号
左大括号和右大括号被解释为格式项的开始和结束。因此,必须使用转义序列显示文本左大括号或右大括号。在固定文本中指定两个左大括号 ("{{") 以显示一个左大括号 ("{"),或指定两个右大括号 ("}}") 以显示一个右大括号 ("}")。按照在格式项中遇到大括号的顺序依次解释它们。不支持解释嵌套的大括号。
解释转义大括号的方式会导致意外的结果。例如,考虑要显示一个左大括号、一个设置为十进制数格式的数值和一个右大括号的格式项“{{{0:D}}}”。但是,实际是按照以下方式解释该格式项:
前两个左大括号 ("{{") 被转义,生成一个左大括号。
之后的三个字符 ("{0:") 被解释为格式项的开始。
下一个字符 ("D") 将被解释为 Decimal 标准数值格式说明符,但后面的两个转义大括号 ("}}") 生成单个大括号。由于得到的字符串 ("D}") 不是标准数值格式说明符号,所以得到的字符串会被解释为用于显示字符串“D}”的自定义格式字符串。
最后一个大括号 ("}") 被解释为格式项的结束。
显示的最终结果是字符串“{D}”。不会显示本来要设置格式的数值。
在编写代码时,避免错误解释转义大括号和格式项的一种方法是单独设置大括号和格式项的格式。也就是说,在第一个格式设置操作中显示文本左大括号,在下一操作中显示格式项的结果,然后在最后一个操作中显示文本右大括号。
处理顺序
如果要设置格式的值是 null(在 Visual Basic 中为 Nothing),则返回空字符串 ("")。
如果要设置格式的类型实现了 ICustomFormatter 接口,则调用 ICustomFormatter.Format 方法。
如果上一步未为类型设置格式,并且该类型实现了 IFormattable 接口,则调用 IFormattable.ToString 方法。
如果上一步未为类型设置格式,则调用该类型的 ToString 方法(从 Object 类继承而来)。
前面的步骤执行完毕之后应用对齐。
string myLName = "Opals";
int myInt = 100;
string FormatFName = String.Format("First Name = |{0,10}|", myFName);
string FormatLName = String.Format("Last Name = |{0,10}|", myLName);
string FormatPrice = String.Format("Price = |{0,10:C}|", myInt);
Console.WriteLine(FormatFName);
Console.WriteLine(FormatLName);
Console.WriteLine(FormatPrice);
FormatFName = String.Format("First Name = |{0,-10}|", myFName);
FormatLName = String.Format("Last Name = |{0,-10}|", myLName);
FormatPrice = String.Format("Price = |{0,-10:C}|", myInt);
Console.WriteLine(FormatFName);
Console.WriteLine(FormatLName);
Console.WriteLine(FormatPrice);
特别的 关于日期格式化,请参考
自定义日期格式:http://msdn.microsoft.com/zh-cn/library/8kb3ddd4(v=VS.90).aspx