C# 中主流的三种格式化方法
C#7.0时代的老文章了,上传上来凑个数吧
字符串插值
using System;
class Hello
{
static void Main()
{
string firstName = "Mike";
string lastnName = "Brown";
System.Console.WriteLine($"Hello { firstName } { lastName }!");
}
}
运行以上这段程序,将会输出:
Hello Mike Brown!
是不是非常的方便?字符串差值是自C# 6.0开始加入的功能,只需要在字符串字面值前附加“$”表明使用了字符串差值即可轻松使用。使用时只需要在字符串中直接以“{ 变量名 }”(花括号与变量名的组合)插入变量即可将变量以文字的形式添加到字符串中。由于这种格式化方式使代码拥有较强的可读性,因此如果没有特殊需要,都建议使用字符串差值的方式来格式化字符串。
设计规范:C# 编程中给变量命名建议使用 Camel(驼峰命名),即多个单词出现,首单词首字母小写,其他单词首字母大写。
复合格式化
using System;
class Hello
{
static void Main()
{
string firstName = "Mike";
string lastName = "Brown";
System.Console.WriteLine("Hello {0} {1}!", firstName, lastName);
}
}
这段程序实现的效果是和上面的例子是完全一样的,接下来来分析下实现原理:
本例中的格式字符串是 Hello {0} {1}!。{0}和{1}是索引占位符,为要在字符串中插入的数据标实了位置。每个占位符对应字符串后的实参(在本例中实参即是 firstname 和 lastname,实参又被称为格式项)。占位符的索引值是从 0 开始的,按顺序对应字符串后的实参,比如 firstname 对应的索引值就是 0。
索引值的顺序是可以更具需要自定义的,并且是可重复的,我们来看下面这个例子:
using System;
class Hello
{
static void Main()
{
string firstName = "Mike";
string lastName = "Brown";
System.Console.WriteLine("Hello {1} {0} {1}!", firstName, lastName);
}
}
此时这段程序的输出是这样的:
Hello Brown Mike Brown!
总而言之,占位符能在格式字符串中按任意顺序出现,统一占位符还能在一个字符串中多次使用。另外,也可省略占位符。但每个占位符都必须有对应的实参。
相较于清晰易读的字符串差值,复合格式化的使用更加灵活,当某个数据需要在一段字符串中多次被插入时,复合格式化的优势就体现出来了。
string.Format()格式化
前文提到的格式化操作都是在 System.Console.WriteLine/Write() 中实现的。而在程序内部的操作中,我们能够很轻松的在为变量赋值时使用字符串插值,如下:
string firstName = "Mike", lastName = "Brown";
string fullName = $"{ firstName } {lastName}";
但是如果我想使用复合格式化呢?
可以看到,这样操作是行不通的。这里就应当使用string.Format():
例子 | 输出 |
---|---|
string text, firstName = "Mike", lastName = "Brown"; text = string.Format("Your full name is {0} {1}.", firstName, lastName); System.Console.WriteLine(text); | Your full name is Mike Brown. |
使用方法与复合格式化雷同,这里就不复赘述了。
格式说明符
通过使用格式说明符,可以将数字显示为16进制,此时应当使用使用 x(大写)或 X(小写)格式说明符。可以使用前文所述的所有格式化形式:
//字符串插值
System.Console.Write($"{42:x}"); //输出2a
System.Console.Write($"{42:X}"); //输出2A
//复合格式化
System.Console.Write("{0:x}", 42); //输出2a
System.Console.Write("{0:X}", 42); //输出2A
//string.Format()格式化
string text = string.Format("{0:x}", 42);
System.Console.Write(text); //输出2a
string text = string.Format("{0:X}", 42);
System.Console.Write(text); //输出2A
同样的,通过格式说明符还能控制小数点后的位数:
System.Console.Write($"{42:f10}"); //输出42.0000000000
也可以使用指数表达法(e像x一样也区分大小写):
System.Console.Write($"{42:e}"); //输出4.200000e+001
关于更多的格式说明符可以查看这篇文章:传送门
数字的表示
C# 是一门现代化的语言,程序中字面值的输入样式是比较丰富的,比如说你可以使用指数计数法:
System.Console.WriteLine(4.336E4) //输出43360
你也可以输入一个16进制的数字,以“0x”开头:
System.Console.WriteLine(0x002A) //输出42
同样的也能使用二进制,以“0b”开头:
System.Console.WriteLine(0b101010) //同样输出42
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。