美文网首页
真会 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

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