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}";

​ 但是如果我想使用复合格式化呢?

截屏2020-06-30 上午9.25.30

​ 可以看到,这样操作是行不通的。这里就应当使用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
文章目录