美文网首页
真会 C# 吗 10

真会 C# 吗 10

作者: JeetChan | 来源:发表于2019-06-26 22:06 被阅读0次

声明

本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大致和第 13 课—— 语句(入门) 对应。

本文主要包括以下内容:

  1. 声明语句。
  2. 表达式语句。
  3. 选择语句。
  4. 迭代语句。
  5. 跳转语句。
  6. 其他语句。

语句 Statements

程序执行的操作采用语句表达。 常见操作包括声明变量、赋值、调用方法、循环访问集合,以及根据给定条件分支到一个或另一个代码块。 语句在程序中的执行顺序称为“控制流”或“执行流”。 根据程序对运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同。

语句可以是以分号结尾的单行代码,也可以是语句块中的一系列单行语句。 语句块括在括号 {} 中,并且可以包含嵌套块。

声明语句

表明一个新的变量,也可使用表达式对该变量进行初始化。声明语句以分号;结束。

string someWord = "rosebud";
int someNumber = 42;
bool rich = true, famous = false;

const double c = 2.99792458E08;
c += 10;

本地变量

本地变量/常量的作用范围是当前的块;同事个块里面(包括里面嵌套的块)不可以声明重名的变量/常量。

static void Main()
{
int x;
{
int y;
int x; // Error - x already defined
}
{
int y; // OK - y not in scope
}
Console.Write (y); // Error - y is out of scope
}

表达式语句

表达式语句是表达式,同样也是合理的语句。表达式语句要么改变了状态,要么调用了可以改变状态的东西,改变状态其实就是指改变变量的值。

// Declare variables with declaration statements:
string s;
int x, y;
System.Text.StringBuilder sb;
// Expression statements
x = 1 + 2; // Assignment expression
x++; // Increment expression
y = Math.Max (x, 5); // Assignment expression
Console.WriteLine (y); // Method call expression
sb = new StringBuilder(); // Assignment expression
new StringBuilder(); // Object instantiation expression

几种可能的表达式语句

  1. 赋值表达式。(包自增和自减表达式)
  2. 方法调用表达式。(void 和非 void)
  3. 对象实例化表达式。

选择语句

选择语句用于根据一个或多个指定条件分支到不同的代码段,控制程序的走向。

选择语句(if,switch)

if 语句

如果 if 后面的 bool 表达式的值为 true,那么 if 语句的内容就会被执行。可使用{}增加可读性。

else 子句,if 语句可以有 else 子句,else 子句还可以嵌套 if 语句。

if (5 < 2 * 3)
    Console.WriteLine ("true"); // true

if (2 + 2 == 5)
    Console.WriteLine ("Does not compute");
else
    Console.WriteLine ("False"); // False
switch 语句

switch 语句允许你根据变量可能有的值来选择分支程序。可能比 if 语句更简洁一些。

当指定常量的时候,只能使用内置的整数类型,bool,char,enum 和 string 类型。每个 case 子句的结尾,必须使用跳转语句来表明下一步往哪里执行:

  • break(跳转到 switch 语句结尾)
  • goto case x(跳转到其他 case)
  • goto default(跳转到 default 子句)
  • 其他的跳转语句 return,throw,continue,goto label
static void ShowCard (int cardNumber)
{
switch (cardNumber)
{
case 13:
Console.WriteLine ("King");
break;
case 12:
Console.WriteLine ("Queen");
break;
case 11:
Console.WriteLine ("Jack");
break;
case -1: // Joker is -1
goto case 12; // In this game joker counts as queen
default: // Executes for any other cardNumber
Console.WriteLine (cardNumber);
break;
}
}

C# 7 增加 switch with patterns 新特性:

  • object 类型允许任何类型的变量
  • 每个 case 子句指定一个类型,如果变量的类型与该类型一样,那么就匹配成功
  • 可能使用 when 来断言一个 case
  • case 子句的顺序是有关系的
  • 可以 case null
static void Main()
{
TellMeTheType (12);
TellMeTheType ("hello");
TellMeTheType (true);
}
static void TellMeTheType (object x) // object allows any type.
{
switch (x)
{
case int i:
Console.WriteLine ("It's an int!");
Console.WriteLine ($"The square of {i} is {i * i}");
break;
case string s:
Console.WriteLine ("It's a string");
Console.WriteLine ($"The length of {s} is {s.Length}");
break;
default:
Console.WriteLine ("I don't know what x is");
break;
}
}

switch (x)
{
case bool b when b == true: // Fires only when b is true
Console.WriteLine ("True!");
break;
case bool b:
Console.WriteLine ("False!");
break;
}

switch (x)
{
case float f when f > 1000:
case double d when d > 1000:
case decimal m when m > 1000:
Console.WriteLine ("We can refer to x here but not f or d or m");
break;
case null:
Console.WriteLine ("Nothing here");
break;
}

迭代语句

C# 允许一串语句可重复执行,迭代语句有,while,do...while,for,foreach 这些。

while

while 后跟一个 bool 表达式,当值为 true 的时候,会循环重复地执行代码体。这个 bool 表达式在代码体循环执行前被检查。

int i = 0;
while (i < 3)
{
Console.WriteLine (i);
i++;
}

// OUTPUT:
// 0
// 1
// 2

do...while

和 while 差不多,区别于 bool 表达式在代码体执行完之后才被检查。

int i = 0;
do
{
Console.WriteLine (i);
i++;
}
while (i < 3);

for

和 while 差不多,但有特殊的了句用来初始化和迭代变量。出事化子句,在循环开始前执行,用来初始化一个或多个迭代变量;条件子句,bool 表达式为 true 时,会执行代码体;迭代子句,每次语句块迭代之后执行,通常用来更新迭代变量;可以这样for(;;)实现无限循环。

for (int i = 0; i < 3; i++)
    Console.WriteLine (i);

for (int i = 0, prevFib = 1, curFib = 1; i < 10; i++)
{
Console.WriteLine (prevFib);
int newFib = prevFib + curFib;
prevFib = curFib; curFib = newFib;
}

for (;;)
    Console.WriteLine ("interrupt me");

foreach

foreach 用来迭代 enumerable 对象里的元素,C# 里大部分集合类型都是 enumerable 的。

foreach (char c in "beer") // c is the iteration variable
    Console.WriteLine (c);

// OUTPUT:
// b
// e
// e
// r

跳转语句

跳转语句有 break,continue,goto,return,throw 这些。

跳转语句遵循 try 语句的可靠性原则。跳出 try 块时,在到达跳转目标之前,总会先执行 try 的 finally 块。不可以从 finally 块里面跳转到外面,除了 throw。

break 语句

break 语句可以结束迭代或 switch 语句的代码体。

int x = 0;
while (true)
{
if (x++ > 5)
break ; // break from the loop
}
// execution continues here after break

continue 语句

continue 语句会放弃当前迭代中剩余语句的执行,直接从下一次迭代开始。

for (int i = 0; i < 10; i++)
{
if ((i % 2) == 0) // If i is even,
    continue; // continue with next iteration
Console.Write (i + " ");
}

// OUTPUT: 1 3 5 7 9

goto 语句

goto 语句把执行跳转到另一个 label 的语句块。label 相当于一个代码块的占位符,放在语句前面,使用冒号:做后缀。当用于 switch 语句内时,写作 goto case case 常量(只能用于常量)。

int i = 1;
startLoop:
if (i <= 5)
{
Console.Write (i + " ");
i++;
goto startLoop;
}
// OUTPUT: 1 2 3 4 5

return 语句

return 语句 会退出方法,并返回一个表达式,该表达式的类型和方法的返回类型一致(方法不是 void 的)。return 语句可以放在方法的任何一个地方,除了 finally 块里。

static decimal AsPercentage (decimal d)
{
decimal p = d * 100m;
return p; // Return to the calling method with value
}

throw 语句

throw 语句,抛出异常,表示发生了错误。

其他语句

  1. using 语句
  2. lock 语句
语句

参考

Statements (C# Programming Guide)

相关文章

  • 真会 C# 吗 10

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

  • 真会 C# 吗 03

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 6 课...

  • 真会 C# 吗 04

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 7 课...

  • 真会 C# 吗 02

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 5 课...

  • 真会 C# 吗 05

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 8 课...

  • 真会 C# 吗 01

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 4 课...

  • 真会 C# 吗

    声明 计划写一个 C# 系列教程学习笔记。内容来自微软 MVP solenovex(https://www.cnb...

  • 真会 C# 吗 08

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

  • 真会 C# 吗 09

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

  • 真会 C# 吗 06

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

网友评论

      本文标题:真会 C# 吗 10

      本文链接:https://www.haomeiwen.com/subject/dwtkcctx.html