|
|
|
|
移动端

1.3.2 将输出写入控制台

《C# 6.0本质论(第5版)》第1章C#概述,本章使用传统HelloWorld程序介绍C#,重点是C#语法基础,包括在C#程序中定义入口。通过本章的学习,将熟悉C#的语法风格和结构,并能写最简单的C#程序。本节为大家介绍将输出写入控制台。

作者:周靖/庞燕 译来源:人民邮电出版社|2017-07-21 14:51

【新品产上线啦】51CTO播客,随时随地,碎片化学习

1.3.2 将输出写入控制台

代码清单1-13中是用 System.Console.Write()而不是 System.Console.WriteLine()方法提示用户输入他的名和姓。 System.Console.Write()方法不在显示文本之后添加一个换行符,而是将当前位置保持在同一行上。这样用户输入的内容就会与提示内容处于同一行。代码清单1-13的输出清楚地演示了 System.Console.Write()的效果。

下一步是将使用 System.Console.ReadLine()获取的值写回控制台。在代码清单1-15所示的例子中,程序将在控制台上输出用户的全名。但这段代码使用的是 System.Console. WriteLine()的一个变体。输出1-5展示了对应的输出。

代码清单1-15 使用字符串插值进行格式化

  1. class HeyYou  
  2. {  
  3. staticvoid Main()  
  4.   {  
  5. string firstName;  
  6. string lastName;  
  7.  
  8.       System.Console.WriteLine("Hey you!");  
  9.  
  10.       System.Console.Write("Enter your first name: ");  
  11.       firstName = System.Console.ReadLine();  
  12.  
  13.       System.Console.Write("Enter your last name: ");  
  14.       lastName = System.Console.ReadLine();  
  15.  
  16.  System.Console.WriteLine(  
  17.  
  18. $"Your full name is { firstName } { lastName }.");  
  19.  
  20.   }  

输出1-5

  1. Hey you!  
  2. Enter your first name: Inigo  
  3. Enter your last name: Montoya  
  4. Your full name is Inigo Montoya. 

在代码清单1-15所示的例子中,不是先用 Write语句输出 Your full name is,再用 Write语句输出 firstName,然后用第三条 Write语句输出空格,最后用 WriteLine语句输出 lastName。这个例子利用了C# 6.0的字符串插值(string interpolation)来进行一次性输出。在字符串插值中,编译器将字符串花括号中的部分解释为可以嵌入代码(表达式)的区域,编译器将对嵌入的表达式估值并将其转换为字符串。字符串插值不需要先逐个执行很多个代码片段,最后再将结果组合成字符串,它可以一步完成这些输出。这使得代码更容易理解。

C# 6.0之前的版本利用的是复合格式化(composite formatting)来进行一次性输出。在复合格式化中,代码首先提供格式字符串(format string)来定义输出格式,参考代码清单1-16。

代码清单1-16 使用System.Console.WriteLine()的复合格式化进行格式化

  1. class HeyYou  
  2. {  
  3. staticvoid Main()  
  4.   {  
  5. string firstName;  
  6. string lastName;  
  7.  
  8.       System.Console.WriteLine("Hey you!");  
  9.  
  10.       System.Console.Write("Enter your first name: ");  
  11.       firstName = System.Console.ReadLine();  
  12.  
  13.       System.Console.Write("Enter your last name: ");  
  14.       lastName = System.Console.ReadLine();  
  15.  
  16.  System.Console.WriteLine(  
  17.  
  18. "Your full name is {0} {1}.", firstName, lastName);  
  19.  
  20.   }  

本例的格式字符串是" Your full name is {0} {1}."。它为要在字符串中插入的数据标识了两个索引占位符。每一个占位符对应着格式字符串之后顺序出现的参数。

注意,索引值是从零开始的。每个要插入的参数,或者称为格式项(format item),按照与索引值对应的顺序排列在格式字符串之后。在本例中,由于 firstName是紧接在格式字符串之后的第一个参数,所以它对应于索引值0。类似地, lastName对应于索引值1。

注意,占位符在格式字符串中不一定按顺序出现。例如,代码清单1-17中的代码交换了两个索引占位符的位置并添加了一个逗号,从而改变了姓名的显示方式(参见输出1-6)。

代码清单1-17 交换索引占位符和对应的变量

  1. System.Console.WriteLine("Your full name is {1}, {0}",  
  2.   firstName, lastName); 

输出1-6

  1. Hey you!  
  2. Enter your first name: Inigo  
  3. Enter your last name: Montoya  
  4. Your full name is Montoya, Inigo 

占位符除了能在格式字符串中按任意顺序出现之外,同一个占位符还能在一个格式字符串中多次使用。另外,也可以忽略占位符。然而,每个占位符都必须对应一个参数,不能使用没有对应参数的占位符。

因为C# 6.0风格的字符串插值比复合字符串方式更易理解,本书的后续章节我们将默认使用字符串插值方法。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

计算机网络技术

本书是为北大燕工教育研究院编写的计算机网络技术的学习教材。它以实际教学大纲为依据,全面系统的介绍了计算机网络技术知识,对于一个...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊