流程控制

条件语句

if语句
  1. if (condition)
  2. statement(s)
  3. else
  4. statement(s)
  5. /***************************/
  6. static void Main(string[] args)
  7. {
  8. Console.WriteLine("Type in the string");
  9. string input;
  10. input = Console.ReadLine();
  11. if (input == " ")
  12. {
  13. Console.WriteLine("You typed in an empty string");
  14. }
  15. else if (input.Length < 5)
  16. {
  17. Console.WriteLine("The string had less than 5 characters");
  18. }
  19. else if (input.Length < 10)
  20. {
  21. Console.WriteLine("The string had less than 10 characters");
  22. }
  23. Console.WriteLine("The string was " + input);
  24. }
  25. /***************************/

switch语句
  1. switch(expression){
  2. case constant-expression :
  3. statement(s);
  4. break;
  5. case constant-expression :
  6. statement(s);
  7. break;
  8. /* 您可以有任意数量的 case 语句 */
  9. default : /* 可选的 */
  10. statement(s);
  11. break;
  12. }

· switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。
· 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
· case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量。
· 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
· 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
· 不是每一个 case 都需要包含 break。如果 case 语句为空,则可以不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
· C# 不允许从一个开关部分继续执行到下一个开关部分。如果 case 语句中有处理语句,则必须包含 break 或其他跳转语句。
· 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
· C# 不支持从一个 case 标签显式贯穿到另一个 case 标签。如果要使 C# 支持从一个 case 标签显式贯穿到另一个 case 标签,可以使用 goto 一个 switch-case 或 goto default。

循环语句

for循环

  1. for ( init; condition; increment )
  2. {
  3. statement(s);
  4. }


下面是 for 循环的控制流:
1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

流程控制 - 图1
  1. using System;
  2. namespace Loops
  3. {
  4. class Program
  5. {
  6. static void Main(string[] args)
  7. {
  8. /* for 循环执行 */
  9. for (int a = 10; a < 20; a = a + 1)
  10. {
  11. Console.WriteLine("a 的值: {0}", a);
  12. }
  13. Console.ReadLine();
  14. }
  15. }
  16. }
  17. /******
  18. a 的值: 10
  19. a 的值: 11
  20. a 的值: 12
  21. a 的值: 13
  22. a 的值: 14
  23. a 的值: 15
  24. a 的值: 16
  25. a 的值: 17
  26. a 的值: 18
  27. a 的值: 19
  28. ******/

while循环

do…while循环

流程控制 - 图2

  1. do
  2. {
  3. statement(s);
  4. }while( condition );
  5. using System;
  6. namespace Loops
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. /* 局部变量定义 */
  13. int a = 10;
  14. /* do 循环执行 */
  15. do
  16. {
  17. Console.WriteLine("a 的值: {0}", a);
  18. a = a + 1;
  19. } while (a < 20);
  20. Console.ReadLine();
  21. }
  22. }
  23. }
  24. /************
  25. a 的值: 10
  26. a 的值: 11
  27. a 的值: 12
  28. a 的值: 13
  29. a 的值: 14
  30. a 的值: 15
  31. a 的值: 16
  32. a 的值: 17
  33. a 的值: 18
  34. a 的值: 19
  35. *************/

foreach循环

C# 也支持 foreach 循环,使用foreach可以迭代数组或者一个集合对象。

  1. /**********
  2. 通过 foreach 循环输出整型数组中的元素。
  3. 通过 for 循环输出整型数组中的元素。
  4. foreach 循环设置数组元素的计算器。
  5. **********/
  6. class ForEachTest
  7. {
  8. static void Main(string[] args)
  9. {
  10. int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 };
  11. foreach (int element in fibarray)
  12. {
  13. System.Console.WriteLine(element);
  14. }
  15. System.Console.WriteLine();
  16. // 类似 foreach 循环
  17. for (int i = 0; i < fibarray.Length; i++)
  18. {
  19. System.Console.WriteLine(fibarray[i]);
  20. }
  21. System.Console.WriteLine();
  22. // 设置集合中元素的计算器
  23. int count = 0;
  24. foreach (int element in fibarray)
  25. {
  26. count += 1;
  27. System.Console.WriteLine("Element #{0}: {1}", count, element);
  28. }
  29. System.Console.WriteLine("Number of elements in the array: {0}", count);
  30. }
  31. }
  32. /********
  33. 0
  34. 1
  35. 1
  36. 2
  37. 3
  38. 5
  39. 8
  40. 13
  41. 0
  42. 1
  43. 1
  44. 2
  45. 3
  46. 5
  47. 8
  48. 13
  49. Element #1: 0
  50. Element #2: 1
  51. Element #3: 1
  52. Element #4: 2
  53. Element #5: 3
  54. Element #6: 5
  55. Element #7: 8
  56. Element #8: 13
  57. Number of elements in the array: 8
  58. ********/

跳转语句

goto语句

continue语句


continue;
流程控制 - 图3

  1. using System;
  2. namespace Loops
  3. {
  4. class Program
  5. {
  6. static void Main(string[] args)
  7. {
  8. /* 局部变量定义 */
  9. int a = 10;
  10. /* do 循环执行 */
  11. do
  12. {
  13. if (a == 15)
  14. {
  15. /* 跳过迭代 */
  16. a = a + 1;
  17. continue;
  18. }
  19. Console.WriteLine("a 的值: {0}", a);
  20. a++;
  21. } while (a < 20);
  22. Console.ReadLine();
  23. }
  24. }
  25. }
  26. /*********
  27. a 的值: 10
  28. a 的值: 11
  29. a 的值: 12
  30. a 的值: 13
  31. a 的值: 14
  32. a 的值: 16
  33. a 的值: 17
  34. a 的值: 18
  35. a 的值: 19
  36. *********/

break语句

流程控制 - 图4

  1. break;
  2. using System;
  3. namespace Loops
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. /* 局部变量定义 */
  10. int a = 10;
  11. /* while 循环执行 */
  12. while (a < 20)
  13. {
  14. Console.WriteLine("a 的值: {0}", a);
  15. a++;
  16. if (a > 15)
  17. {
  18. /* 使用 break 语句终止 loop */
  19. break;
  20. }
  21. }
  22. Console.ReadLine();
  23. }
  24. }
  25. }
  26. /**********
  27. a 的值: 10
  28. a 的值: 11
  29. a 的值: 12
  30. a 的值: 13
  31. a 的值: 14
  32. a 的值: 15
  33. ***********/

return

控制程序流程

选择程序流程

if语句
switch语句

迭代语句

while
do
for

foreach

foreach语法:
foreach(type identifier in expression)
type identifie:声明了一个迭代变量,是局部变量,其作用域为嵌套的语句。
expression:
如果类型为数组,就执行IEnumberable的隐士转换。
如果类型为集合,要么实现了IEnumberable或IEnumberable,要么提供了合适的GetEnumerator方法。
遍历集合中的元素时,迭代变量指向当前元素。

  1. string s = "This is a test";
  2. foraech(char c in s)
  3. {
  4. Console.WriteLine(c);
  5. }

跳转语句

break语句
continue语句
return语句