网站后台更新文档,做网站应该了解什么软件,个人网站搭建步骤,企业网站网站建设价格C#提供了各式各样的语句#xff0c;大多数是由C和C发展而来#xff0c;当然#xff0c;在C#中做了相应修改。语句和表达式一样#xff0c;都是C#程序的基本组成部分#xff0c;在本文我们来一起学习C#语句。
1.语句
语句是构造所有C#程序的过程构造块。在语句中可以声明…C#提供了各式各样的语句大多数是由C和C发展而来当然在C#中做了相应修改。语句和表达式一样都是C#程序的基本组成部分在本文我们来一起学习C#语句。
1.语句
语句是构造所有C#程序的过程构造块。在语句中可以声明局部变量或常数调用方法创建对象或将值赋予变量、属性或字段。语句有很多种其中控制语句可以创建循环如for循环也可以根据一个布尔表达式的运算结果进行判断并分支到不同的代码块如if或switch语句。语句通常以分号终止。
按类别来分C#的语句如表7-1所示。 本章将重点介绍选择语句、循环语句、跳转语句其他语句将在相应文章中介绍。其中checked语句和unchecked语句已在之前章节中介绍过这里不再赘述。跳转语句中的yield和异常处理语句以及lock语句等将在后续文章中介绍。
2.程序的三种结构
程序的三种常用结构是 顺序结构 分支结构 循环结构
在C#中分支结构使用条件语句实现循环结构使用循环语句实现。下面将分别介绍这三个重要结构。
2.1 顺序结构
C#中最常见的结构就是顺序结构即按照语句编写的顺序依次执行如图7-1所示。 2.2 分支结构
实际情况中只有顺序结构往往是不够的有时候我们需要根据某一个条件的判定结果来确定程序的执行路径如图7-2所示。C#中控制分支结构的语句包括 if......else if......else......语句 switch语句 三元运算符?
2.3 循环结构
当某一条件成立时重复执行某段程序循环体。C#的循环结构的语句包括 for循环 while......do......循环 do......while......循环
图7-3分别对应上述三种控制循环结构语句。 3.条件语句
当程序中遇到两种或更多的选择时就需要使用条件语句对程序的执行路径进行抉择。C#的条件语句包括if语句和switch语句。下面分别讲讲这两种语句。
3.1 if语句
除了要学会if的用法还要学习配合使用else if和else语句它们可以配合if完成对其他情况的处理。if语句是最常用的条件判断语句它根据一个布尔表达式的计算结果来选择要执行的语句当表达式的结果为true时执行一个操作为false时则执行另一个操作如图7-4所示。 语法如下 下面我们通过代码进行说明
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x 10;if (x 5){Console.WriteLine(x值大于5!);}}}
}
如果要解决的问题比较简单只有一种条件需要判断那么只需要使用if语句就已足够。但是问题往往不会这么简单比如我们买房不同的楼盘价格不同不同的楼层价格也不同如果要写一段程序帮助准用户计算购房价格就要对各种情况进行处理即需要根据多个条件进行判断单纯的一个if已经不够了这时可以扩展if语句使用多个else-if来处理多个条件。
其流程如图7-5所示。 语法如下 if......else if语句的代码示例我们通过代码清单7-1进行介绍另外在代码清单7-1中还要对if语句和else if语句的用法进行对比通过对两段程序的运行结果进行分析希望以此来告知大家在对多个条件进行判断的时候如何正确地使用if和else if。对于需要判断多个条件的情况有两种选择 使用多个if 使用else if排列
下面的代码示例对此进行分析如代码清单7-1和代码清单7-2所示
代码清单7-1 使用else if排列
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x 30;if (x 5){Console.WriteLine(x值大于5!);}else if (x 10){Console.WriteLine(x值大于10!);}else if (x 20){Console.WriteLine(x值大于20!);}}}
}
运行结果为
x值大于5!
代码清单7-2 使用多个if语句
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x 30;if (x 5){Console.WriteLine(x值大于5!);}if (x 10){Console.WriteLine(x值大于10!);}if (x 20){Console.WriteLine(x值大于20!);}}}
}
运行结果为
x值大于5!
x值大于10!
x值大于10!
通过对代码清单7-1和代码清单7-2的运行结果进行对比我们可以发现前者在条件得到满足以后立即退出条件判断后面的语句都得不到执行unreachable相比之下后者在第一个条件满足以后继续执行对后面的所有if条件进行测试执行因此在打印出x值大于5!后仍然继续执行。对代码清单7-2做如下修改即可达到和代码清单7-1相同的效果即每个条件测试完后如果满足则使用return关键字返回如代码清单7-3所示。
代码清单7-3 使用return关键字
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x 30;if (x 5){Console.WriteLine(x值大于5!);return;}if (x 10){Console.WriteLine(x值大于10!);return;}if (x 20){Console.WriteLine(x值大于20!);return;}}}
}
3.2 switch语句
switch语句也可用于对多个条件的判断但它和if以及else if排列并非完全相同。switch语句是一个控制语句它通过将控制传递给其体内的一个case语句来处理多个选择其中case语句只能处理枚举值、常量值和文本值其语法如下
switch (表达式) {case 常量表达式1:语句组;break;case 常量表达式2:语句组;break;default:语句组;break;
}
switch语句可以包括任意数目的case实例但是任何两个case语句都不能具有相同的值。语句体从选定的语句开始执行直到break将控制传递到case体以外。在每一个case块包括上一个块不论它是case语句还是default语句的后面都必须有一个跳转语句如break。C#不支持从一个case标签显式贯穿到另一个case标签但有一个例外这与Cswitch语句不同------当case语句中没有代码时如代码清单7-4所示。
代码清单7-4 switch语句
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x 30;switch (x){case 10:case 20:Console.WriteLine(x值等于20!);break;case 30:Console.WriteLine(x值等于30!);break;default:Console.WriteLine(x值未知!);break;}}}
}
运行结果为
x值等于30!
上述代码中x表达式的值为30switch中的case语句测试紧随其后的常数值当和x值相等时则执行其下的语句组其中switch语句内的第9行case为空语句因此程序直接从第12行的case语句贯穿到第13行而第13行的case语句值和x值不匹配因此也不会进入第16行和x值匹配因此系统执行其下的语句组打印出x值等于30!注意每个case内的语句组都是以break结尾空语句例外。第15、18、21行的break语句也可以换成return。注意这仅限于在switch语句后没有其他语句的情况下否则switch后的语句将不会被执行。关于return语句的更多细节请参阅后续文章。
4.跳转语句
使用跳转语句执行分支该语句导致立即传递程序控制。跳转语句中使用下列关键字 break continue return throw goto
下面分别介绍以上各关键字的使用。
4.1 break语句
break语句用于终止最近的封闭循环或它所在的switch语句。控制传递给终止语句后面的语句如果有的话。下面分别演示break在循环和switch中的用法。
代码清单7-5 break在循环中的使用
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){for (int i 0; i 10; i){if (i 5){break;}Console.WriteLine(i{0}, i);}}}
}
运行结果为
i0
i1
i2
i3
i4
代码清单7-5 中循环语句本来要执行一个从0计数到9的循环但break语句在计数达到5后终止循环因此if条件后打印i值的语句第15行得不到执行。以下代码为break在switch语句中的用法请参阅代码清单7-4这里不再赘述。
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x 1;switch (x){case 1:Console.WriteLine(x值等于1!);break;case 2:Console.WriteLine(x值等于2!);break;case 3:Console.WriteLine(x值等于3!);break;default:Console.WriteLine(x值未知!);break;}}}
}
4.2 continue语句
continue语句将控制权传递给它所在的封闭迭代语句的下一次迭代。如代码清单7-6所示。
代码清单7-6 continue语句
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){for (int i 0; i 10; i){if (i 5){continue;}Console.WriteLine(i{0}, i);}}}
}
运行结果为
i0
i1
i2
i3
i4
i5
在上述代码中循环语句要执行从0到9的循环第11行的条件语句判断了变量i的值当它大于5时即开始下一次循环这意味着continue以后的语句都将得不到执行。因此运行结果只输出到了当i小于等于5时的结果。
4.3 return语句
return语句终止它出现在其中的方法的执行并将控制返回给调用方法。它还可以返回一个可选值。如果方法为void类型则可以省略return语句。如代码清单7-7所示。
代码清单7-7 使用return语句
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){string result HelloWorld(cn);Console.WriteLine(result);result HelloWorld(en);Console.WriteLine(result);}private static string HelloWorld(string language){string word string.Empty;switch (language){case cn:word 你好;break;case en:word Hello;break;}return word;}}
}
运行结果为
你好
Hello
4.4 throw语句
throw语句用于在程序执行期间出现反常情况异常时发生信号。异常也是一个对象该对象的类是从System.Exception派生的如代码清单7-8所示。
代码清单7-8 throw语句
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){string result null;try{Console.WriteLine(result.ToString());}catch (Exception){throw;}}}
}
4.5 goto语句
goto语句通常和标签语句配合使用将程序控制直接传递给标签语句。例如可用于跳出较深的嵌套循环。另一个通常用法是将控制传递给特定的switch-case标签或switch语句中的默认标签。goto语句要尽量少用会降低程序代码的可读性。该语句的用法如代码清单7-9所示。
代码清单7-9 goto语句
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){for (int i 0; i 100; i){if (i 5){goto Exit;}}Exit:Console.WriteLine(Exit);}}
}
4.6 default语句
default关键字在switch语句中充当默认标签的作用相当于if条件语句中的else。和else一样default并不是必需的。
5.标签语句
标签语句的语法如下
标签语句
在运行的时候标签下的语句还是会被执行标签的作用就是可以让程序从其他位置随时转到标签位置执行如图7-6所示。 5.1 标签
在标签的有效范围内可以在goto语句中使用它。我们知道goto语句可以在块内外转移控制权但这仅限于从块内到块外。图7-7中的goto标签语句在标签的有效范围外因此引发编译错误。 5.2 标签语句的有效范围
标签在它所在的整个语句块都是有效的包括嵌入的块。如果两个同名标签的有效范围重叠则会引发一个编译期错误。
6.循环语句
通过使用循环语句可以创建循环。循环语句导致嵌入语句根据循环终止条件多次执行。除非遇到跳转语句否则这些语句将按顺序执行。
C#中共有四种循环语句它们全部都支持用break来退出循环用continue来跳过本次循环进入下一次循环。
循环语句使用下述关键字 while do......while for foreach......in
下面分别介绍。
6.1 while循环
while会先检查一个表达式的值如果值为true则执行一个语句或语句块直到指定的表达式为false停止循环如代码清单7-10所示。
while循环的语法如下
while布尔表达式{//语句或语句块
}
代码清单7-10 while循环
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int i 0;while (i 10){Console.WriteLine(i);i;}}}
}
如代码清单7-10所示while语句在循环执行语句前会先计算i10表达式的值如果为true则继续否则终止循环。
上述代码的运行结果为
0
1
2
3
4
5
6
7
8
9
6.2 do......while循环
do语句重复执行括在{}里的一个语句或语句块直到指定的表达式计算为false。do......while循环和while循环最大的不同是前者比后者多做一次循环因为while先检查布尔表达式的值后执行循环体语句do......while先执行循环体语句后检查布尔表达式的值。
do......while循环的语法如下
do{//语句或语句块
}while布尔表达式
在代码清单7-11的示例中只要变量x小于5do-while循环语句就开始执行。
代码清单7-11 do......while循环
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x 0;do{Console.WriteLine(x);x;} while (x 5);}}
}
运行结果为
0
1
2
3
4
6.3 for循环
for语句一般用于循环过程在循环开始时需要初始化然后开始循环执行当其中的布尔表达式返回false时退出否则会造成死循环。
for循环的语法为
for变量初始化布尔表达式迭代表达式{//语句或语句块
}
其中变量初始化、布尔表达式、迭代表达式这三项都是可选项。变量初始化为循环控制变量做初始化循环控制变量可以有一个或多个用逗号隔开这意味着控制变量的类型是一样的布尔表达式为循环控制条件也可以有一个或多个语句迭代表达式按规律改变循环控制变量的值例如可以递增或者递减如图7-8所示。 注意变量初始化、布尔表达式和迭代表达式都是可选的。如果忽略了条件就可能产生一个死循环要用跳转语句break、return或goto才能退出。如代码清单7-12所示。
代码清单7-12 省略了变量初始化、布尔表达式和迭代表达式的for循环
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int i 0;for (; ; ){Console.WriteLine(i);if (i 6){break;}}}}
}
如代码清单7-12所示第10行的for循环省略了变量初始化、布尔表达式和迭代表达式这就造成了一个没有出口的循环即常说的死循环。为避免这种情况引入了变量i通过i的自增以及当i值大于6的时候通过break语句让循环终止从而避免了死循环的发生。
上述代码输出如下
0
1
2
3
4
5
6
接下来我们来看一个标准的for循环的写法如代码清单7-13所示
代码清单7-13 标准的for循环写法
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){for (int i 0; i 10; i){Console.WriteLine(i);}}}
}
输出如下
0
1
2
3
4
5
6
7
8
9
6.4 foreach......in循环
foreach语句基本为数组和集合专用用于遍历一个数组或对象集合中的每一个元素其语法为
foreach类型变量in集合{//语句或语句块
}
foreach语句的作用就是每次循环都取出集合中的一个元素并放在变量中然后执行一次语句或语句块。注意在语句或语句块中变量是只读的。也就是说只能访问变量的值而不能为其赋值如图7-9所示。 foreach循环如代码清单7-14所示。
代码清单7-14 foreach循环
using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int[] array { 1, 2, 3, 4, 5 };foreach (int i in array){Console.WriteLine(i);// i 0; // 这行代码被注释掉了因为 foreach 迭代变量是只读的}}}
}
7.using语句
这里的using是语句而非using指令using指令为导入指定命名空间而using语句则是为确保正确使用IDisposable对象的方便语法。这里所谓正确使用指的是当使用完毕实现了IDisposable接口的对象以后自动调用它的Dispose方法。
其语法为
using局部变量声明及初始化语句多个使用逗号分隔{//语句或语句块
}
其中的局部变量声明部分负责声明在语句或语句块中使用的对象变量可以声明多个变量以逗号隔开即可。下面的代码是使用using语句前的用法可以看到通过将font1对象放入try块中并在finally块中调用使用完的font1变量的Dispose方法释放资源如图7-10所示。 不使用using语句的示例如代码清单7-15所示。
代码清单7-15 不使用using语句的示例
using System;
using System.Drawing;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){Font font1 new Font(Arial, 10.0f);try{byte charset font1.GdiCharSet;}finally{if (font1 ! null)font1.Dispose();}}}
}
那么使用using语句后会是怎样的呢下面对上述代码进行改写如代码清单7-16所示font1的声明和初始化放在了using语句中这点一定要注意不能仅仅进行声明还必须包括初始化如果要使用多个对象就直接在font1对象的初始化语句后使用逗号分隔直接加即可。从第10行到第13行为相关资源的有效范围出了这个范围CLR自动调用相关对象的Dispose方法。因此这里使用的资源必须是实现了IDisposable的对象。使用using语句进行改写后的示例如代码清单7-16所示。
代码清单7-16 使用using语句进行改写后的示例
using System;
using System.Drawing;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){using (Font font1 new Font(Arial, 10.0f)){byte charset font1.GdiCharSet;}}}
}
注Dispose方法是用于释放对象占用的非托管资源如文件句柄、数据库连接、网络连接、图形资源等的一种机制。它是 IDisposable 接口的一部分。 文章转载自: http://www.morning.zsfooo.com.gov.cn.zsfooo.com http://www.morning.ktblf.cn.gov.cn.ktblf.cn http://www.morning.yslfn.cn.gov.cn.yslfn.cn http://www.morning.pgggs.cn.gov.cn.pgggs.cn http://www.morning.addai.cn.gov.cn.addai.cn http://www.morning.tmxtr.cn.gov.cn.tmxtr.cn http://www.morning.brxzt.cn.gov.cn.brxzt.cn http://www.morning.kxqmh.cn.gov.cn.kxqmh.cn http://www.morning.iznek.com.gov.cn.iznek.com http://www.morning.prls.cn.gov.cn.prls.cn http://www.morning.knscf.cn.gov.cn.knscf.cn http://www.morning.yqpzl.cn.gov.cn.yqpzl.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.lfpdc.cn.gov.cn.lfpdc.cn http://www.morning.hcrxn.cn.gov.cn.hcrxn.cn http://www.morning.yjmlg.cn.gov.cn.yjmlg.cn http://www.morning.tnnfy.cn.gov.cn.tnnfy.cn http://www.morning.sh-wj.com.cn.gov.cn.sh-wj.com.cn http://www.morning.qpnmd.cn.gov.cn.qpnmd.cn http://www.morning.pqppj.cn.gov.cn.pqppj.cn http://www.morning.qlbmc.cn.gov.cn.qlbmc.cn http://www.morning.sffwz.cn.gov.cn.sffwz.cn http://www.morning.lxbml.cn.gov.cn.lxbml.cn http://www.morning.xldpm.cn.gov.cn.xldpm.cn http://www.morning.smhtg.cn.gov.cn.smhtg.cn http://www.morning.pyncm.cn.gov.cn.pyncm.cn http://www.morning.dbfp.cn.gov.cn.dbfp.cn http://www.morning.llmhq.cn.gov.cn.llmhq.cn http://www.morning.hlwzd.cn.gov.cn.hlwzd.cn http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn http://www.morning.ggjlm.cn.gov.cn.ggjlm.cn http://www.morning.pmwhj.cn.gov.cn.pmwhj.cn http://www.morning.flzqq.cn.gov.cn.flzqq.cn http://www.morning.gbsfs.com.gov.cn.gbsfs.com http://www.morning.dtmjn.cn.gov.cn.dtmjn.cn http://www.morning.tpqzs.cn.gov.cn.tpqzs.cn http://www.morning.dnjwm.cn.gov.cn.dnjwm.cn http://www.morning.jfjfk.cn.gov.cn.jfjfk.cn http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn http://www.morning.wlfxn.cn.gov.cn.wlfxn.cn http://www.morning.guofenmai.cn.gov.cn.guofenmai.cn http://www.morning.qrlkt.cn.gov.cn.qrlkt.cn http://www.morning.tqjwx.cn.gov.cn.tqjwx.cn http://www.morning.mtbsd.cn.gov.cn.mtbsd.cn http://www.morning.cgtrz.cn.gov.cn.cgtrz.cn http://www.morning.gdljq.cn.gov.cn.gdljq.cn http://www.morning.sjbty.cn.gov.cn.sjbty.cn http://www.morning.elbae.cn.gov.cn.elbae.cn http://www.morning.qwlml.cn.gov.cn.qwlml.cn http://www.morning.nlwrg.cn.gov.cn.nlwrg.cn http://www.morning.zyytn.cn.gov.cn.zyytn.cn http://www.morning.dgfpp.cn.gov.cn.dgfpp.cn http://www.morning.kngx.cn.gov.cn.kngx.cn http://www.morning.ymjrg.cn.gov.cn.ymjrg.cn http://www.morning.nggry.cn.gov.cn.nggry.cn http://www.morning.nypsz.cn.gov.cn.nypsz.cn http://www.morning.rynq.cn.gov.cn.rynq.cn http://www.morning.ydhmt.cn.gov.cn.ydhmt.cn http://www.morning.homayy.com.gov.cn.homayy.com http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn http://www.morning.zsthg.cn.gov.cn.zsthg.cn http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn http://www.morning.pwbps.cn.gov.cn.pwbps.cn http://www.morning.ffbp.cn.gov.cn.ffbp.cn http://www.morning.phxns.cn.gov.cn.phxns.cn http://www.morning.jwsrp.cn.gov.cn.jwsrp.cn http://www.morning.bfcxf.cn.gov.cn.bfcxf.cn http://www.morning.sjli222.cn.gov.cn.sjli222.cn http://www.morning.snktp.cn.gov.cn.snktp.cn http://www.morning.dytqf.cn.gov.cn.dytqf.cn http://www.morning.mdlqf.cn.gov.cn.mdlqf.cn http://www.morning.npxht.cn.gov.cn.npxht.cn http://www.morning.qrwjb.cn.gov.cn.qrwjb.cn http://www.morning.nmngq.cn.gov.cn.nmngq.cn http://www.morning.rwyw.cn.gov.cn.rwyw.cn http://www.morning.bktly.cn.gov.cn.bktly.cn http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn http://www.morning.cjqqj.cn.gov.cn.cjqqj.cn http://www.morning.rqxch.cn.gov.cn.rqxch.cn http://www.morning.qfwzm.cn.gov.cn.qfwzm.cn