.NET|.NET Core C# 初级篇 1-2

.NET Core CSharp初级篇 1-2

本节内容循环与判断
循环 循环是一个在任何语言都是极为重要的语法,它可以用于很多东西,例如迭代数组等等。在C#中,语法层面的循环有:for , foreach ,while,do goto五种。循环你可以理解为当某条件满足时,重复的执行一段代码。接下来我们开始讲讲这五种循环的使用方法及优缺点。
for 循环
for循环可以说是最为常用的循环方式了,for循环时由以下部分组成:
  • 起始条件
  • 循环条件
  • 状态改变方式
这是大多数语言for循环的组成,例如以下例子
for(int i =0; i<5; i++) { //表示从i=0开始,每次i+1,当i<5的时候跳出循环 //并且每次循环开始都会判断循环条件是否满足,如果满足则会继续进行循环 }

非常简单,对吧。状态改变方式可以是多样的,你可以把它改成 i = i+2 等等各种方式。
foreach 循环
foreach循环在其他语言中有着不同的实现方式,但是在C#中,foreach是遍历每一个元素并返回,而for循环你可以简单的理解位循环 i 当 i 满足时跳出。不过foreach循环并不是每一个有集合或者数组属性的东西都可以循环,使用foreach循环的前提就是该元素集合必须继承IEnumerable接口。因为foreach在遍历元素的时候,第一次遍历会调用GetEnumerator()方法将第一个元素赋值给循环的临时变量,之后每次调用MoveNext()方法,直到循环结束。看下面例子。
foreach(var a in list) { /* 第一次时调用GetEnumerator()将第一个变量赋值给a,然后调用MoveNext()将后续变量赋值给a*/ }

while 循环
while循环是单条件循环,也是一个非常常用的循环,在指定的布尔表达式的计算结果为 true 时,while语句会执行一条语句或一个语句块。 由于在每次执行循环之前都会计算此表达式,所以while循环会执行零次或多次。例:
while(expression) { //当expression为真时,才会继续循环。 }

do 循环
do循环也被称为 do......while 循环,它的原理和while循环时一样的,都是当表达式为真的时候进行,但是不同于while的是,如果表达式一开始就为假,while循环不会执行循环体内的代码,而do循环会至少执行一次(通常是一次,除非你在循环体内对表达式结果进行了修改)。
do { //todo }while(expression)

goto 循环
事实上goto不能称之为循环,但是它确实可以实现类似于循环的功能。但是它也可以作为跳出循环的一种方式,不过在判断语句中也会有它的用物之地,在后面的判断介绍中我会进行详细的说明。
lb: //todo 这表示在lb到goto lb之间循环 goto lb; while(true) { //作为跳出循环的方式 goto finish; } finish: //todo

判断 在C#中实现判断的方式通常有三种方式
  • if else if else语句
  • switch 语句
  • 三元表达式?
if 语句
if语句基于布尔表达式的值来识别运行哪个语句,需要注意的是,if判断结果如果为真的话,后面的else if和else都不再进行判断。例如:
if(condition) { if(condition3) { //嵌套判断,满足上一级条件又满足下一级条件 } } else if(condition1) { } else if(condition2) { } else { }

若condition验证为真,后面的condition都不再进行判断。if语句总体来说还是非常简单的
switch 语句
switch语句也称为开关语句,它根据与匹配表达式 匹配的模式,从候选列表中选择单个开关部分 进行执行。如果其中一个条件满足的时候,开关打开,运行其中的代码。每一个开关都应该有相应的跳出语句。特别的,之前讲到的goto就可以作为跳转的语句。例如:
//i是一个变量,不是表达式 switch(i) { case 1: break; case 2: goto case 1; default: break; }

三元表达式?
?表达式其实是一个只能判断两种结果的表达,也就是是能判断true和false,用法和 if 语句是一致的。直接看例子吧:
int a =3; int b = 0; //这个意思是a==3为真的话,那么b=10,如果为假,b=5 a ==3?b=10:b=5;

几点补充 循环的跳出:
循环跳出有三种方式,
  • break
  • continue
  • goto
break是指跳出整个循环,直接运行后面的代码,continue是指跳过本次循环,直接进入下一次循环条件判断,而goto就是指跳转到指定的标签位置。比较需要注意的就是break跳出和continue跳出的方式,本质区别就是一个为终止循环,一个是跳过本次。
运算的简写
这个本来应当在上一节进行讲解的,但是考虑到这个写法在循环中运用比较多,因此在本节进行讲解。
看以下例子
int i =0; i+=2; //等价于i = i + 2 //请问下面这两种有何区别? int b = ++i; b = i++; //如果运算符在前,例如++i,表示先进行i=i+1操作,然后进行赋值,i++表示先进行赋值,随后进行加法操作

练习题 请问下列两种判断,哪种效率高?为什么?
//Sample1: if(a>5) //todo else if(a==5) //todo else //todo //Sample 2: if(a>5) //todo if (a==5) //todo else //todo

  • 利用switch语句,实现输入1,输出星期1,输入2,输出星期二
  • 请试着使用循环实现数组的访问、累加等操作
  • 试问该循环一共运行多少次
for(int i = 0; i<9; ++i) for(int j =0; j<7; j++)

Github
BiliBili主页
WarrenRyan's Blog
【.NET|.NET Core C# 初级篇 1-2】博客园

    推荐阅读