此语句主要用来做选择,可与else结合使用。
(1)其声明语言如下:
if(conditions) //conditions为布尔表达式 statement(s) //符合布尔表达式执行的代码 else statement(s) //不符合布尔表达式执行的代码
(2)示例1:if…else
static void Main(string[] args) { bool flag = true; if (flag = true) { Console.WriteLine("the flag is true."); } else { Console.WriteLine("the flag is false."); }
示例2:else if
static void Main(string[] args) { string grade; int score; Console.WriteLine("Input your score:"); score = Convert.ToInt32(Console.ReadLine()); if (score > 100 || score < 0) { Console.WriteLine("false score range!"); return; } if (score > 90) grade = "A"; else if(score>80) grade="B"; else if(score>70) grade="C"; else if(score>60) grade="D"; else grade="E"; Console.WriteLine("your grade is {0}", grade);
switch语句是一个控制语句,它通过控制传递给其体内的一个case语句来处理多个选择和枚举。switch语句中有很多case区段,每个擦色标记后可以指定一个常数作为标准,不能将一组常数放在一个case标记之后。
(1)其声明语言如下:
switch(判断条件) { case1 判断式; //区段,符合条件执行的代码 break case2 判断式; //区段,符合条件执行的代码 break case 3判断式; //区段,符合条件执行的代码 break … default: //最后排除的代码输出 break }
(2)示例
static void Main(string[] args) { string mycountry = "中国"; switch (mycountry) { //如果mycountry为“中国”,就执行分支1 case "中国": Console.WriteLine("中国"); break; //如果mycountry为“美国”,就执行分支1 case "美国": Console.WriteLine("美国"); break; //如果mycountry值是“值都不符合以上分支内容,则执行default语句 default : Console.WriteLine("无"); break; } Console.ReadLine(); }
运行结果:中国
注:if语句与switch语句的区别
If语句通过范围来判断
switch语句通过具体判断(a=5时)
用于执行重复程序代码的语句,在循环次数不固定时相当有效。
(1)其声明语言如下:
while(布尔表达式) { 循环体 }
(2)示例
static void Main() { Console.WriteLine("输出的结果为:"); int n=1; while (n<6) { Console.WriteLine("循环第{0}次",n); n++; } Console.Read(); }
注:当break、goto、return或throw语句将控制权转移到while循环之外时,可以终止该循环。若要将控制权传递给下一次迭代但不退出循环,请使用continue语句。
(1)其声明语言如下:
do { 循环体 } while(布尔表达式)
(2)示例
static void Main() { Console.WriteLine("输出的结果为:"); int n=1; do { Console.WriteLine("循环第{0}次",n); n++; } while (n<0); Console.Read(); }
注:
第一:当n<0或1、2时,循环一次;n<3时,循环2次;随数字的增大,循环次数增多。
第二:选择whie循环还是do-while循环取决于所解决的计算机问题,但大部分情况下选择while循环。
for语句循环重复执行一个语句或语句块,直到指定的表达式计算为False值。for循环对于迭代数组和顺序处理非常方便。for语句将初始值、布尔判断和更新值都编写在同一行程序中。
(1)其声明语言如下:
for(初始值;布尔表达式;更新值) { 程序代码块 }
(2)示例
static void Main() { Console.WriteLine("输出的结果为:"); for (int i = 0, j = 10; i <= j; i++, j--) { Console.WriteLine("{0},{1}", i, j); } Console.Read(); }
运行结果:
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。foreach语句能够对实现Ienumerable接口的容器进行遍历,并提供一个枚举来实现Ienumerable接口(是公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。)。
(1)其声明语言如下
foreach (类型名 变量名 in 集合对象) { statement }
其中:
类型:identifier 的类型。
变量名(identifier):表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的。
集合对象(expression):对象集合或数组表达式。集合元素的类型必须可以转换为 identifier 类型。请不要使用计算为 null 的表达式。
而应计算为实现 IEnumerable 的类型或声明 GetEnumerator 方法的类型。在后一种情况中,GetEnumerator 应该要么返回实现 IEnumerator 的类型,要么声明 IEnumerator 中定义的所有方法。
statement:要执行的嵌入语句。
(2)示例
static void Main(string[] args) //程序入口 { Console.WriteLine("请输出结果:"); //程序输出时需要 int[] fibarray=new int[]{0,1,2,3,5}; //数组 foreach(int i in fibarray) //foreach语句遍历数组 { System.Console.WriteLine(i); //控制台输出 } Console.Read(); //读取一个字符,返回该字符的ascII码, }
运行结果:
break语句可以用来终止一条迭代语句,是控制流程跳转到迭代语句的下一条语句。break语句可以放在循环体的任意位置来实现这一目的,若要中止整个嵌套循环,可以使用return语句。
(1)其声明语言如下:break(和其它语句一起用)
(2)示例
static void Main() //程序入口 { Console.WriteLine("输出结果为:"); for (int i = 1; i <= 10; i++) //for循环 { if(i>4) //i>4时 { break; //中断 } Console.WriteLine(i); //输出结果 } Console.Read(); }
运行结果:
使执行流程跳过循环体的剩余部分而继续执行下一个循环。
(1)其声明语言如下:continue(与其他语句一起使用)
(2)示例
static void Main() //程序入口 { Console.WriteLine("输出结果为:"); for (int i = 1; i <= 5; i++) //for循环 { if(i<3) //i<3时 { continue; //继续,排除小于3的部分 } Console.WriteLine(i); //输出结果 } Console.Read(); }
运行结果:
注:continue语句不会像break语句一样干涉驯化体重复的次数,它只是影响某特定重复中的流程控制。
goto语句属于无条件跳转语句,因为C#允许在代码行加标签,这样就可以用goto语句直接跳转到这些代码行上。优点:可以方便地控制何时去执行指定代码;缺点:过多地使用这个语句将很难读懂代码段。(标签是一个标识符,后跟一个冒号)
(1)示例
Goto label1: Console.WriteLine("this won't be executed"); Label1: Console.WriteLine("from here");
return语句终止它所在的方法的执行,并将控制权返回给调用方法,另外,它可以返回一个可选值。如果方法为void类型,则可以省略return语句。
(1)其声明语言如下:与其他语句一起使用
(2)示例
static string MyStr(string str) //创建一个string类型方法 { string OutStr; //声明一个字符串变量 OutStr = "您输入的数据是:" + str; //为字符串变量赋值 return OutStr; //使用return语句返回字符串变量 } staticvoid Main(string[] args) { Console.WriteLine("请您输入内容:"); //输出提示信息 string inputstr =Console.ReadLine(); //获取输入的数据 Console.WriteLine(MyStr (inputstr )); //调用MyStr方法并显示结果 Console.ReadLine(); }
运行结果:
此语句可以确保在使用完资源密集型的对象后,就处理它们,其语法如下:
(1)其声明语言如下:
using(object) { //code using object }
一个try块可以有如下情况:
throw语句用于发出在程序执行期间出现反常情况(异常)的信号。throw语句通常与try-catch或try-finally语句一起使用。可以使用throw语句显式引发异常(这里引发自定义异常)。创建用户自定义异常,好的编码方法是以“Exception”作为用户自定义异常类名的结尾。
(1)示例(现在还不理解,以后补充解释)
本示例通过Exception派生了一个新异常类UserEmployeeException,该类中定义了3个构造函数,每个构造函数使用不同的参数,然后再抛出自定义异常。程序代码如下。
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace ClsUserExecption { class Program { public class UserEmployeeException: Exception { private string errorinfo=string.Empty; public UserEmployeeException() { } public UserEmployeeException (string message) : base(message) { errorinfo = message; } public UserEmployeeException (string message, Exception inner):base(message,inner) { errorinfo = message; inner = null; } } public static void Main() { try { throw new UserEmployeeException("error Info of use "); } catch (UserEmployeeException ey) { Console.WriteLine("输出结果为:"); Console.WriteLine(ey.Message,ey.InnerException); Console.Read(); } } } }
try-catch错误处理表达式允许将任何可能发生异常情形的程序代码放置在try{}程序代码块进行监控,真正处理错误异常的程序代码则被放置在catch{}块里面,一个try{}块可对应多个catch{}块。
(1)示例(现在还不理解,以后补充解释)
usingSystem; classMainClass { staticvoidProcessString(stringstr) { if(str==null) { thrownewArgumentNullException(); } } staticvoidMain() { Console.WriteLine("输出结果为:"); try { stringstr=null; ProcessString(str); } catch(ArgumentNullExceptione) { Console.WriteLine("{0}Firstexception.",e.Message); } catch(Exceptione) { Console.WriteLine("{0}Secondexception.",e.Message); } } }
异常发生时,执行将终止,同时将控制权交给最近的异常处理语句,这就意味着不能按正常的设计思想执行。而有些资源清理(如关闭文件)必须总是执行,即使有异常发生,为了实现该功能,可以使用finally块。finally块用于清除try块中分配的任何资源,以及运行必须执行的代码,即使在发生异常的情况下。控制将总是传递给finally块,与try块的退出方式无关。
(1)示例(现在还不理解,以后补充解释)
using System; public class MainClass { static void Main() { int i = 123; string s = "Some string"; object o = s; try { i = (int)o; } catch { } finally { Console.Write("i = {0}", i); } Console.Read(); } }
注意事项:
异常继承层次结构(从左到右):
System.Object—System.Exception—System.SystemException—派生类
基类Exception存在以下两类异常。