语句是程序中最小程序指令。C#语言中可以使用多种类型的语句,每一种类型的语句又可以通过多个关键字实现。以下是C# 语言中使用的主要控制语句

 类别       关键字                      

选择语句      if、else、switch、case

循环语句      do、for、foreach、in、while

跳转语句      break、continue、default、goto、return

异常处理语句    throw、try-catch、try-finally

检查和未检查语句  checked、unchecked

非保护和固定语句  unsafe、fixed

锁定语句      lock

一、选择语句

  选择语句根据某个条件是否成立,来控制程序的执行流程。有两种结构的选择语句:

    if-else 结构
   switch-case 结构
(一) if-else 语句
  if-else 语句根据 Boolean 表达式的值选择要执行的语句。if-else 语句的形式为:   

       if (expression)
     statement1
    [else
     statement2]
  其中:expression 是 bool 类型的表达式,或者是可以隐式转换为bool类型的表达式,也可以是重载了 true 和 false 操作符的类型的表达式。statement1 是当 expression 为 true 时将要执行的语句。statement2 是当 expression 为 false 时将要执行的语句。如果想要执行的语句不止一个,可以通过使用 { } 将多个语句包含在块中,有条件地执行多个语句。这里的语句可以是任何种类的,包括嵌套在其中的另一个 if 语句。在嵌套的 if 语句中,else 子句将和离得最近的且没有 else 子句关联的if语句关联。例如:
    if (x > )
if (y > )
Console.Write("Statement_1");
else
Console.Write("Statement_2");
  在此例中,如果条件(y > 20)为 false,将显示 Statement_2。但如果要使 Statement_2 与条件 (x > 10) 关联,则使用大括号:
if (x > )
{
if (y > )
Console.Write("Statement_1");
}
else
Console.Write("Statement_2");
  在此例中,如果条件(x > 10)为 false,将显示 Statement_2。还可以扩展if语句,使用下列else-if排列来处理多个条件:
if (Condition_1)
Statement_1;
else if (Condition_2)
Statement_2;
else if (Condition_3)
Statement_3;
……
else
Statement_n;
  其中:Condition 表示条件语句。Statement_n 表示条件 n 成立时要执行的语句。
(二)  switch-case 语句
  switch 语句是通过将控制传递给其内部的一个 case 语句来处理多个选择的流程控制语句。switch 语句的基本结构:
switch (<testVar>)
{
case <comparisonVal1>:
<如果<testVar>等于<comparisonVal1>时执行的语句>
break;
case <comparisonVal2>:
<如果<testVar>等于<comparisonVal2>时执行的语句>
break;
……
case <comparisonValN>:
<如果<testVar>等于<comparisonValN>时执行的语句>
break;
default:
<如果没有与<testVar>匹配的<comparisonValX>时执行的语句>
break;
}
  <testVar> 中的值与 case 语句中指定的每个 <comparisonValX> 值进行比较,如果有一个匹配,就执行为该匹配提供的语句。如果没有匹配,就执行 default 部分中的代码。执行完每个部分中的代码后,还须有一个 break 语句。在执行完一个 case 块后,再执行第二个 case 语句是非法的。
  break 语句将中断 switch 语句的执行,而执行该结构后面的语句。
  还有另一种方法可以防止程序流程从一个 case 语句转到下一个 case 语句。可以使用 return 语句。也可以使用 goto 语句,因为 case 语句实际上是在 C# 代码中定义标签。
  一个 case 语句处理完后,不能自由进入下一个 case 语句,但有一个例外。如果把多个 case 语句放(堆叠)在一起,其后加一行代码,实际上是一次检查多个条件。如果满足这些条件中的任何一个,就会执行代码,例如:
using System;
class SwitchTest
{
static void Main()
{
int n = ;
switch(n)
{
case :
case :
case :
Console.WriteLine("It's 1, 2, or 3.");
break;
default:
Console.WriteLine("Not sure what it is.");
break;
}
}
}
  输出:
It's 1, 2, or 3.
  每个 <comparisonValX> 都必须是一个常量。一种方法是提供字面值,另一种方式是使用常量。在这里使用常量可读性更好。

二、循环语句

  使用循环语句可以让程序多次执行相同的代码或代码块,这些代码或代码块称为循环体。对于任何一个循环体来说,都应该提供一个跳出循环的条件,不同的循环语句提供不同的条件。C#
语言中提供了以下4种循环语句:
    · do-while
  · for
  · foreach-in
  · while
(一)  do-while语句
  do 语句重复执行括在 {} 里的一个语句或语句块,直到指定的表达式为 false 时为止。do 循环的结构如下:
do
{
statement
} while (expression);
  其中:expression 为 bool 类型的表达式,或者是可以隐式转换成 bool 类型的表达式,也可以是重载 true 和 false 操作符的类型的表达式。用来测试循环是否终止。statement 是需要循环执行的语句。do-while 结构先执行循体语句,然后判断 while 条件是否为 true。如果为 true,将循环执行;如果为 false,则退出循环。因此 do-while 循环结构中的语句至少要执行一次。while 语句后面的分号是必须的。
  示例:下面示例中,只要变量 y 小于 5,do 循环语句就开始执行。
// statements_do.cs
using System;
public class TestDoWhile
{
public static void Main ()
{
int x = ;
do
{
Console.WriteLine(x);
x++;
}
while (x < );
}
}
  输出:

(二)for语句

for语句通常用来让一条语句或一个语句块执行一定的次数。for语句的一般形式:

for ([initializers]; [expression]; [iterators])
{
statement
}
        initializers 表示初始化循环计数器,如果有多个变量需要初始化,可用逗号隔开。expression 是bool类型的表达式,用来测试循环是否终止。iterators 表示增大或减少循环计数器的值。statement 是需要循环执行的语句。

  其执行流程为:
  首先初始化
initializers。接着,检查
expression。如果为 true,执行
statement,并重新计算循环计数器的值。如果为
false,则退出循环。返回上一步,继续执行。因为对 expression
的测试是在循环体执行之前,所以 for 语句可执行 0
次或多次。

  for
语句的所有表达式都是可选的;例如,下列语句用于写一个无限循环:
for (;;)
{
...
}
  示例:
// statements_for.cs
// for loop
using System;
class ForLoopTest
{
static void Main()
{
for (int i = ; i <= ; i++)
{
Console.WriteLine(i);
}
}
}
  输出:

(三)  foreach-in 语句
  foreach 语句为数组或对象集合中的每个元素执行一遍循环体。通常用来遍历某个集合,以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。
  语法:
foreach (type identifier in expression)
{
staterment
}
  其中:
  type 表示 identifier 的类型。
  identifier 表示集合元素的循环变量。
  expression 表示对象集合或数组表达式。集合元素的类型必须可以转换成 identifier 的类型。
  staterment 表示需要循环执行的语句。
  对于数组或集合中的每个元素,循环体都将执行一次。遍历完所有的元素后,程序将退出 foreach 块,执行后面的语句。
  (1)  foreach在数组中的使用
  该语句提供一种简单、明了的方法来循环访问数组的元素。
  例如,下面的代码创建一个名为 numbers 的数组,并用 foreach 语句循环访问该数组:
int[] numbers = { , , , , , , -, -,  };
foreach (int i in numbers)
{
System.Console.WriteLine(i);
}
  对于多维数组,使用嵌套的for循环可以更好地控制数组元素。
      (2)  foreach 在集合中的使用
  当对集合使用 foreach 语句时,该集合必须满足一定的条件。
  例如下面的 foreach 语句:
foreach (ItemType item in myCollection)

myCollection 必须满足下面的要求。

  集合类型:
  必须是 interface、class 或 struct。必须包括一个名叫 GetEnumerator 的实例方法,该方法返回一个类型,比如 Enumerator。
  类型 Enumerator(类或结构)必须包含:
  一个名为 Current 的属性。类型为 ItemType 或可以转换成 ItemType 的类型。它的属性访问器返回集合中的当前元素。一个名叫 MoveNext 的方法。该方法用于增加计数器的值,如果集合中的元素个数小于计数器的值,该方法返回 true,否则返回 false。
(四)  while 语句
  当 while 语句中的判断条件为 true 时,循环体将一直循环执行。语法:
while (expression)
{
statement
}
  其中:
  expression 表示 bool
类型的表达式。用来测试循环是否终止。statement
表示需要循环执行的语句。while 语句和 do-while 语句不同,do-while
是先执行循环体再判断条件,而 while 是先判断条件。如果条件为
true,则执行循环体,否则将跳过循环体,执行 while
块后面的代码。因此,while 语句中的循环体可能执行 0
次或多次。在
while 循环体中,可以使用 break、goto、reture 或 throw
语句跳出循环。如果要跳转到下一次循环,可在循环体中使用 continue
语句。
  示例:
// statements_while.cs
using System;
class WhileTest
{
static void Main()
{
int n = ;
while (n < )
{
Console.WriteLine("Current value of n is {0}", n);
n++;
}
}
}
  输出:
Current value of n is
Current value of n is
Current value of n is
Current value of n is
Current value of n is

三、 跳转语句

  跳转语句用于从程序的一个地方把执行控制转移到另一个地方,每一条跳转语句的应用都会增加程序执行流程的分支。C#语言中可使用以下4种跳转语句:

    · break
  · continue
  · goto
  · return

(一)  break 语句

  break 语句用于中止当前执行的循环或它所在的 switch 语句,把控制交给循环或 switch 结构后面的语句。

  示例:

  在此例中,条件语句包含一个应该从 1 计数到 100 的计数器;但 break 语句在计数达到 4 后终止循环。

// statements_break.cs
using System;
class BreakTest
{
static void Main()
{
for (int i = ; i <= ; i++)
{
if (i == )
{
break;
}
Console.WriteLine(i);
}
}
}

  输出:


  下面的示例演示break在switch语句中的用法。

// statements_break2.cs
// break and switch
using System;
class Switch
{
static void Main()
{
Console.Write("Enter your selection (1, 2, or 3): ");
string s = Console.ReadLine();
int n = Int32.Parse(s); switch (n)
{
case :
Console.WriteLine("Current value is {0}", );
break;
case :
Console.WriteLine("Current value is {0}", );
break;
case :
Console.WriteLine("Current value is {0}", );
break;
default:
Console.WriteLine("Sorry, invalid selection.");
break;
}
}
}

  输入 1,则示例输出为:

Enter your selection (, , or ):
Current value is

  如果输入 4,则输出为:

Enter your selection (, , or ):
Sorry, invalid selection.
(二)  continue 语句
  在循环体中使用 continue 语句将结束当前的循环,而进入下一次的循环。示例:在此示例中,计数器最初是从 1 到 10 进行计数,但通过将 continue 语句与表达式 (i < 9) 一起使用,跳过了 continue 与 for 循环体末尾之间的语句。
// statements_continue.cs
using System;
class ContinueTest
{
static void Main()
{
for (int i = ; i <= ; i++)
{
if (i < )
{
continue;
}
Console.WriteLine(i);
}
}
}
  输出:


(三)  goto 语句
  goto 语句将程序控制直接交给标记的语句。有以下形式:
  goto identifier;
  goto case constant-expression;
  goto default;
  其中:
  identifier 表示一个标签。constant-expression 表示一个 switch-case 标签。在第一种形式中,identifier 指定位于当前循环体中的标签,是一个与 goto 语句位于同一个循环体中的标签。goto 语句的常用方法是在 switch 语句中,将控制转换传递到特定的 switch-case 标签或 default 标签。有时也在多层嵌套的循环体中使用 goto 语句跳出多层循环。如果在代码中声明了标签,但从未引用过它,编译时将出现警告信息。
  示例:下面的示例演示了 goto 在 switch 语句中的使用。
// statements_goto_switch.cs
using System;
class SwitchTest
{
static void Main()
{
Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
Console.Write("Please enter your selection: ");
string s = Console.ReadLine();
int n = int.Parse(s);
int cost = ;
switch (n)
{
case :
cost += ;
break;
case :
cost += ;
goto case ;
case :
cost += ;
goto case ;
default:
Console.WriteLine("Invalid selection.");
break;
}
if (cost != )
{
Console.WriteLine("Please insert {0} cents.", cost);
}
Console.WriteLine("Thank you for your business.");
}
}
  如果输入了 2,示例输出:
Coffee sizes: =Small =Medium =Large
Please enter your selection:
Please insert cents.
Thank you for your business.
  下面的示例演示了使用 goto 跳出嵌套循环。
// statements_goto.cs
// Nested search loops
using System;
public class GotoTest1
{
static void Main()
{
int x = , y = ;
int count = ;
string[,] array = new string[x, y]; // Initialize the array:
for (int i = ; i < x; i++) for (int j = ; j < y; j++)
array[i, j] = (++count).ToString(); // Read input:
Console.Write("Enter the number to search for: "); // Input a string:
string myNumber = Console.ReadLine(); // Search:
for (int i = ; i < x; i++)
{
for (int j = ; j < y; j++)
{
if (array[i, j].Equals(myNumber))
{
goto Found;
}
}
} Console.WriteLine("The number {0} was not found.", myNumber);
goto Finish; Found:
Console.WriteLine("The number {0} is found.", myNumber); Finish:
Console.WriteLine("End of search.");
}
}

  如果输入 44,则示例输出:

Enter the number to search for:
The number is found.
End of search.

(四)  return 语句

  return 语句终止所在方法的执行,并将程序的控制返回给调用它的方法。它还可以返回一个可选值。如果方法为 void 类型,可以省略 return 语句。return语句的形式如下:  

 return [expression];

     其中:

  expression 表示方法的返回值。当方法类型为 void 时不能使用 expression 参数。

  示例:

在下面的示例中,方法 A() 以 double 值的形式返回变量 Area。

// statements_return.cs
using System;
class ReturnTest
{
static double CalculateArea(int r)
{
double area = r * r * Math.PI;
return area;
} static void Main()
{
int radius = ;
Console.WriteLine("The area is {0:0.00}", CalculateArea(radius));
}
}

  输出:

The area is 78.54

基础系列(5)—— C#控制语句的更多相关文章

  1. JavaScript基础系列

    JavaScript基础系列 JavaScript是一种基于对象和事件驱动的客户端脚本语言. JavaScript的注释 // 单行 /**/ 多行注释 JavaScript变量,函数名和操作符都是区 ...

  2. 基础系列(4)—— C#装箱和拆箱

    一 装箱和拆箱的概念 装箱是将值类型转换为引用类型 : 拆箱是将引用类型转换为值类型 : 值类型:包括原类型(Sbyte.Byte.Short.Ushort.Int.Uint.Long.Ulong.C ...

  3. 基础系列(6)—— C#类和对象

    一.类介绍       类(class)是C#类型中最基础的类型.类是一个数据结构,将状态(字段)和行为(方法和其他函数成员)组合在一个单元中.类提供了用于动态创建类实例的定义,也就是对象(objec ...

  4. 带你学够浪:Go语言基础系列 - 8分钟学控制流语句

    ★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...

  5. 带你学够浪:Go语言基础系列 - 8分钟学复合类型

    ★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...

  6. 【Basics of Entity Framework】【EF基础系列1】

    EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...

  7. C#基础系列——Attribute特性使用

    前言:上篇 C#基础系列——反射笔记 总结了下反射得基础用法,这章我们来看看C#的另一个基础技术——特性. 1.什么是特性:就博主的理解,特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属 ...

  8. C#基础系列——小话泛型

    前言:前面两章介绍了C#的两个常用技术:C#基础系列——反射笔记 和 C#基础系列——Attribute特性使用 .这一章来总结下C#泛型技术的使用.据博主的使用经历,觉得泛型也是为了重用而生的,并且 ...

  9. C#基础系列——委托实现简单设计模式

    前言:上一篇介绍了下多线程的相关知识:C#基础系列——多线程的常见用法详解,里面就提到了委托变量.这篇简单介绍下委托的使用.当然啦,园子里面很多介绍委托的文章都会说道:委托和事件的概念就像一道坎,过了 ...

随机推荐

  1. docker 入门 (一)重要概念介绍

    序 之前一直想学一下docker,但是基本看完就忘记了,下次用还是要再翻一下教程. 最近项目要用,连续用了一段时间,就熟练了,基本的使用以及概念都记住了. 趁现在还刚入门,就把入门一些容易遇到的问题记 ...

  2. 对大数据的批量导入MySQL数据库

    自己的库里有索引在用insert导入数据时会变慢很多 使用事务+批量导入 可以配置使用spring+mybatis整合的方式关闭自动提交事务(地址),选择批量导入每一百条导入使用list存储值传入到m ...

  3. [译]C语言实现一个简易的Hash table(1)

    说明 Hash table翻译过来就是Hash表,是一种提供了类似于关联数组的数据结构,可以通过key执行搜索.插入和删除操作.Hash表由一些列桶(buckets)组成,而每一个bucket都是由k ...

  4. yii学习笔记(2),创建控制器

    将网站根目录配置到项目的web目录 打开网站访问的是web/index.php这时打开默认页面 访问一下其他页面,发现浏览器地址的url携带了一个参数 http://www.test.com/inde ...

  5. sklearn的train_test_split,果然很好用啊!

    sklearn的train_test_split   train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签. 格式: X_tra ...

  6. Mac os安装golang开发环境

    为了能够愉快地进行golang编程,我们需要安装以下几样东西: 包管理Homebrew 语言环境golang 版本管理git 虚拟器docker 编译器Goland 我将按照这个顺序叙述整个安装过程 ...

  7. Js中处理数据的常用内置方法

    以下方法均不会修改操作数本身,只是将操作数处理后的数据返回 1.丢弃小数部分,保留整数部分 parseInt(x);//丢弃x中的小数部分,保留x中的整数部分 2.Math对象常用的方法 ceil(x ...

  8. 20155230 2016-2017-2《Java程序设计》第二周学习总结

    20155230 2016-2017-2 <Java程序设计>第er周学习总结 教材学习内容总结 JAVA编程风格 1.命名变量时不可以使用数字及特殊字符作为开头. 2.变量名称不可以与J ...

  9. 【转载】OGRE 2.1 Windows 编译

    OGRE 2.1 Windows 编译 环境: Windows 7 64Bit Visual Studio 2012 OGRE 2.1 CMake 2.8.12.1 OGRE: OGRE官方推出了最新 ...

  10. iOS 影音新格式 HEIF HEVC

    苹果在 iOS 11 的发布会上,推出了两种新的媒体格式 HEIF HEVC,都是为了保证画质的情况下,大大减少视频.照片的大小. 一.简介 HEVC全称 High Efficiency Video ...