<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # C# 中的流控制 > 原文: [https://zetcode.com/lang/csharp/flowcontrol/](https://zetcode.com/lang/csharp/flowcontrol/) 在 C# 教程的這一部分中,將討論流控制。 我們定義了幾個關鍵字,這些關鍵字使我們能夠控制 C# 程序的流程。 在 C# 語言中,有幾個關鍵字可用于更改程序的流程。 當程序運行時,語句從源文件的頂部到底部執行。 逐一。 可以通過特定的關鍵字更改此流程。 語句可以執行多次。 一些語句稱為條件語句。 僅在滿足特定條件時才執行它們。 ## C# `if`語句 `if`語句具有以下一般形式: ```cs if (expression) { statement; } ``` `if`關鍵字用于檢查表達式是否為真。 如果為`true`,則執行一條語句。 該語句可以是單個語句或復合語句。 復合語句由該塊包圍的多個語句組成。 塊是用大括號括起來的代碼。 `Program.cs` ```cs using System; namespace IfStatement { class Program { static void Main(string[] args) { var r = new Random(); int n = r.Next(-5, 5); Console.WriteLine(n); if (n > 0) { Console.WriteLine("The n variable is positive"); } } } } ``` 生成一個隨機數。 如果數字大于零,我們將向終端打印一條消息。 ```cs var r = new Random(); int n = r.Next(-5, 5); ``` 這兩行生成 -5, 5 之間的隨機整數。 ```cs if (n > 0) { Console.WriteLine("The n variable is positive"); } ``` 使用`if`關鍵字,我們檢查生成的數字是否大于零。 `if`關鍵字后跟一對圓括號。 在方括號內,我們放置一個表達式。 該表達式產生布爾值。 如果布爾值是`true`,則執行兩個大括號括起來的塊。 在我們的例子中,字符串`The n variable is positive`被打印到終端上。 如果隨機值為負,則不執行任何操作。 如果我們只有一個表達式,則大括號是可選的。 ```cs $ dotnet run -3 $ dotnet run -4 $ dotnet run -1 $ dotnet run 1 The n variable is positive ``` 滿足條件后,消息將寫入控制臺。 ## C# `else`語句 我們可以使用`else`關鍵字來創建一個簡單的分支。 如果`if`關鍵字后方括號內的表達式的值為假,則將自動執行`else`關鍵字后方的語句。 `Program.cs` ```cs using System; namespace IfElse { class Program { static void Main(string[] args) { var r = new Random(); int n = r.Next(-5, 5); Console.WriteLine(n); if (n > 0) { Console.WriteLine("The number is positive"); } else { Console.WriteLine("The number is negative"); } } } } ``` 要么執行`if`關鍵字之后的塊,要么執行`else`關鍵字之后的塊。 ```cs if (n > 0) { Console.WriteLine("The number is positive"); } else { Console.WriteLine("The number is negative"); } ``` `else`關鍵字緊隨`if`塊的右大括號。 它有自己的塊,用大括號括起來。 ```cs $ dotnet run -3 The number is negative $ dotnet run -1 The number is negative $ dotnet run 2 The number is positive ``` 我們執行該程序三次。 ## C# `else if` 我們可以使用`else if`關鍵字創建多個分支。 僅當不滿足先前條件時,`else if`關鍵字才會測試其他條件。 請注意,我們可以在測試中使用多個`else if`關鍵字。 `Program.cs` ```cs using System; namespace MultipleBranches { class Program { static void Main(string[] args) { var r = new Random(); int n = r.Next(-5, 5); Console.WriteLine(n); if (n < 0) { Console.WriteLine("The n variable is negative"); } else if (n == 0) { Console.WriteLine("The n variable is zero"); } else { Console.WriteLine("The n variable is positive"); } } } } ``` 以前的程序有一個小問題。 負值設為零。 以下程序將解決此問題。 ```cs if (n < 0) { Console.WriteLine("The n variable is negative"); } else if (n == 0) { Console.WriteLine("The n variable is zero"); } else { Console.WriteLine("The n variable is positive"); } ``` 如果第一個條件的計算結果為`true`,例如輸入的值小于零,將執行第一個程序段,并跳過其余兩個程序段。 如果不滿足第一個條件,則檢查`if else`關鍵字之后的第二個條件。 如果第二個條件的值為真,則執行第二個塊。 如果不是,則執行`else`關鍵字之后的第三個程序段。 如果不滿足先前的條件,則始終執行`else`塊。 ```cs $ dotnet run -1 The n variable is negative $ dotnet run 4 The n variable is positive $ dotnet run 1 The n variable is positive $ dotnet run 0 The n variable is zero ``` 我們執行該程序三次。 0 被正確處理。 ## C# `switch`語句 `switch`語句是選擇控制流語句。 它允許變量或表達式的值通過多路分支控制程序執行的流程。 與使用`if` / `else if` / `else`語句的組合相比,它以更簡單的方式創建多個分支。 我們有一個變量或一個表達式。 `switch`關鍵字用于根據值列表測試變量或表達式中的值。 值列表用`case`關鍵字顯示。 如果值匹配,則執行`case`之后的語句。 有一個可選的`default`語句。 如果找不到其他匹配項,則執行該命令。 從 C# 7.0 開始,匹配表達式可以是任何非`null`表達式。 `switch`語句非常復雜。 ### 選擇星期幾 在下面的示例中,我們使用`switch`語句選擇星期幾。 `Program.cs` ```cs using System; namespace SwitchDayOfWeek { class Program { static void Main(string[] args) { var dayOfWeek = DateTime.Now.DayOfWeek; switch (dayOfWeek) { case DayOfWeek.Sunday: Console.WriteLine("dies Solis"); break; case DayOfWeek.Monday: Console.WriteLine("dies Lunae"); break; case DayOfWeek.Tuesday: Console.WriteLine("dies Martis"); break; case DayOfWeek.Wednesday: Console.WriteLine("dies Mercurii"); break; case DayOfWeek.Thursday: Console.WriteLine("dies Jovis"); break; case DayOfWeek.Friday: Console.WriteLine("dies Veneris"); break; case DayOfWeek.Saturday: Console.WriteLine("dies Saturni"); break; } } } } ``` 該示例確定星期幾并打印其等效的拉丁語。 ```cs switch (dayOfWeek) { ... } ``` 在圓括號中,`switch`關鍵字從要測試的表達式中獲取一個值。 `switch`關鍵字的主體放在一對或大括號內。 在體內,我們可以放置多個`case`選項。 每個選項都以`break`關鍵字結尾。 ```cs case DayOfWeek.Sunday: Console.WriteLine("dies Solis"); break; ``` 使用`case`語句,我們測試匹配表達式的值。 如果它等于`DayOfWeek.Sunday`,則打印拉丁語`dies Solis`。 ```cs $ dotnet run dies Solis ``` 該程序在周日運行。 ### 選擇區域 要求用戶輸入域名。 讀取域名并將其存儲在變量中。 該變量使用`switch`關鍵字針對選項列表進行測試。 `Program.cs` ```cs using System; namespace SwitchStatement { class Program { static void Main(string[] args) { Console.Write("Enter a domain name: "); string domain = Console.ReadLine(); domain = domain.Trim().ToLower(); switch (domain) { case "us": Console.WriteLine("United States"); break; case "de": Console.WriteLine("Germany"); break; case "sk": Console.WriteLine("Slovakia"); break; case "hu": Console.WriteLine("Hungary"); break; default: Console.WriteLine("Unknown"); break; } } } } ``` 在我們的程序中,我們有一個`domain`變量。 我們從命令行讀取變量的值。 我們使用`case`語句測試變量的值。 有幾種選擇。 例如,如果該值等于`"us"`,則將`"United States"`字符串打印到控制臺。 ```cs string domain = Console.ReadLine(); ``` 從控制臺讀取用戶輸入。 ```cs domain = domain.Trim().ToLower(); ``` `Trim()`方法從潛在的前導和尾隨空白中剝離變量。 `ToLower()`將字符轉換為小寫。 現在,`"us"`,`"US"`,`"us"`是美國域名的可行選項。 ```cs case "us": Console.WriteLine("United States"); break; ``` 在這種情況下,我們測試域變量是否等于`"us"`字符串。 如果為`true`,則將消息打印到控制臺。 該選項以`break`關鍵字結束。 如果成功求值了其中一個選項,則`break`關鍵字將終止`switch`塊。 ```cs default: Console.WriteLine("Unknown"); break; ``` `default`關鍵字是可選的。 如果沒有求值`case`選項,則執行`default`部分。 ```cs $ dotnet run Enter a domain name: us United States $ dotnet run Enter a domain name: HU Hungary $ dotnet run Enter a domain name: pl Unknown ``` 我們執行該程序幾次。 ### 使用`when`語句 `case`語句可與`when`語句一起使用以指定其他條件。 `Program.cs` ```cs using System; namespace SwitchWhen { class Program { static void Main(string[] args) { Console.Write("Enter your age: "); var input = Console.ReadLine(); var age = Int32.Parse(input.Trim()); switch (age) { case var myAge when myAge < 0: Console.WriteLine("Age cannot be a negative value"); break; case var myAge when myAge > 130: Console.WriteLine("This is an unlikely high age"); break; default: Console.WriteLine("The entered age is {0}", age); break; } } } } ``` 在程序中,要求用戶輸入他的年齡。 ```cs case var myAge when myAge < 0: Console.WriteLine("Age cannot be a negative value"); break; ``` 借助`when`表達式,我們測試輸入的值是否小于 0。使用??`var`關鍵字,我們創建一個臨時的`myAge`變量。 ### 使用枚舉作為匹配表達式 對于匹配的表達式,我們可以使用任何類型。 在下面的示例中,我們使用枚舉。 `Program.cs` ```cs using System; namespace SwitchEnum { enum Color { Red, Green, Blue, Brown, Yellow, Pink, Orange } class Program { static void Main(string[] args) { var color = (Color) (new Random()).Next(0, 7); switch (color) { case Color.Red: Console.WriteLine("The color is red"); break; case Color.Green: Console.WriteLine("The color is green"); break; case Color.Blue: Console.WriteLine("The color is blue"); break; case Color.Brown: Console.WriteLine("The color is brown"); break; case Color.Yellow: Console.WriteLine("The color is yellow"); break; case Color.Pink: Console.WriteLine("The color is pink"); break; case Color.Orange: Console.WriteLine("The color is orange"); break; default: Console.WriteLine("The color is unknown."); break; } } } } ``` 該示例隨機生成顏色枚舉。 `swith`語句確定生成哪個顏色值。 ```cs $ dotnet run The color is orange $ dotnet run The color is blue $ dotnet run The color is brown ``` 我們運行程序。 ## `switch`表達式 `switch`表達式使`switch`語句的語法更加簡潔。 它們是在 C# 8.0 中引入的。 `Program.cs` ```cs using System; namespace SwitchExpressions { class Program { static void Main(string[] args) { Console.Write("Enter a domain name: "); string domain = Console.ReadLine(); domain = domain.Trim().ToLower(); string result = domain switch { "us" => "United States", "de" => "Germany", "sk" => "Slovakia", "hu" => "Hungary", _ => "Unknown" }; Console.WriteLine(result); } } } ``` 該變量位于`switch`關鍵字之前。 `case`和`:`元素替換為`=>`。 `default`案例被`_`丟棄替換。 主體是表達式,而不是語句。 ## C# `while`語句 `while`語句是一個控制流語句,它允許根據給定的布爾條件重復執行代碼。 這是`while`循環的一般形式: ```cs while (expression) { statement; } ``` `while`關鍵字在大括號括起來的塊內執行語句。 每次將表達式求值為`true`時都會執行這些語句。 `Program.cs` ```cs using System; namespace WhileStatement { class Program { static void Main(string[] args) { int i = 0; int sum = 0; while (i < 10) { i++; sum += i; } Console.WriteLine(sum); } } } ``` 在代碼示例中,我們從一系列數字計算值的總和。 `while`循環分為三個部分。 初始化,測試和更新。 語句的每次執行都稱為循環。 ```cs int i = 0; ``` 我們啟動`i`變量。 它用作計數器。 ```cs while (i < 10) { ... } ``` `while`關鍵字后的圓括號內的表達式是第二階段,即測試。 執行主體中的語句,直到表達式的計算結果為`false`。 ```cs i++; ``` 這是`while`循環的最后一個第三階段,即更新。 我們增加計數器。 請注意,對`while`循環的不正確處理可能會導致循環不斷。 ### `do while`語句 可以至少運行一次該語句。 即使不滿足條件。 為此,我們可以使用`do while`關鍵字。 `Program.cs` ```cs using System; namespace DoWhile { class Program { static void Main(string[] args) { int count = 0; do { Console.WriteLine(count); } while (count != 0); } } } ``` 首先執行該塊,然后求值真值表達式。 在我們的情況下,條件不滿足,`do while`語句終止。 ## C# 循環語句 如果在啟動循環之前知道周期數,則可以使用`for`語句。 在此構造中,我們聲明一個計數器變量,該變量在每次循環重復期間會自動增加或減少值。 ## 簡單的循環 `for`循環分為三個階段:初始化,條件和代碼塊執行以及遞增。 `Program.cs` ```cs using System; namespace ForStatement { class Program { static void Main(string[] args) { for (int i=0; i<10; i++) { Console.WriteLine(i); } } } } ``` 在此示例中,我們將數字`0..9`打印到控制臺。 ```cs for (int i=0; i<9; i++) { Console.WriteLine(i); } ``` 分為三個階段。 在第一階段,我們將計數器`i`初始化為零。 此階段僅完成一次。 接下來是條件。 如果滿足條件,則執行`for`塊中的語句。 在第三階段,計數器增加。 現在,我們重復 2、3 個階段,直到不滿足條件并保留`for`循環為止。 在我們的情況下,當計數器`i`等于 10 時,`for`循環停止執行。 ## `for`循環數組遍歷 `for`循環可用于遍歷數組。 從數組的`Length`屬性,我們知道數組的大小。 `Program.cs` ```cs using System; namespace ForStatement2 { class Program { static void Main(string[] args) { string[] planets = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Pluto" }; for (int i = 0; i < planets.Length; i++) { Console.WriteLine(planets[i]); } Console.WriteLine("In reverse:"); for (int i = planets.Length - 1; i >= 0; i--) { Console.WriteLine(planets[i]); } } } } ``` 我們有一個數組,用于保存太陽系中行星的名稱。 使用兩個`for`循環,我們按升序和降序打印值。 ```cs for (int i = 0; i < planets.Length; i++) { Console.WriteLine(planets[i]); } ``` 通過從零開始的索引訪問數組。 第一項的索引為 0。因此,`i`變量被初始化為零。 條件檢查`i`變量是否小于數組的長度。 在最后階段,`i`變量增加。 ```cs for (int i = planets.Length - 1; i >= 0; i--) { Console.WriteLine(planets[i]); } ``` 此`for`循環以相反順序打印數組的元素。 `i`計數器被初始化為數組大小。 由于索引基于零,因此最后一個元素的索引數組大小為 1。 該條件確保計數器大于或等于零。 (數組索引不能為負數)。 在第三步中,`i`計數器遞減 1。 ## `for`循環中的更多表達式 可以在`for`循環的初始化和迭代階段中放置更多表達式。 `Program.cs` ```cs using System; namespace ForStatement3 { class Program { static void Main(string[] args) { var r = new Random(); var values = new int[10]; int sum = 0; int num = 0; for (int i = 0; i < 10; i++, sum += num) { num = r.Next(10); values[i] = num; } Console.WriteLine(string.Join(",", values)); Console.WriteLine("The sum of the values is {0}", sum); } } } ``` 在我們的示例中,我們創建了一個十個隨機數的數組。 計算這些數字的總和。 ```cs for (int i = 0; i < 10; i++, sum += num) { num = r.Next(10); values[i] = num; } ``` 在`for`循環的第三部分中,我們有兩個用逗號分隔的表達式。 `i`計數器增加,并且當前編號添加到`sum`變量中。 ```cs Console.WriteLine(string.Join(",", values)); ``` 使用`System.String`類的`Join()`方法,一次打印出數組的所有值。 它們將以逗號分隔。 ```cs $ dotnet run 9,3,1,7,9,8,5,6,3,3 The sum of the values is 54 ``` We run the program. ### 嵌套循環 `For`語句可以嵌套; 即一個`for`語句可以放在另一個`for`語句中。 嵌套`for`循環的所有循環都針對外部`for`循環的每個循環執行。 `Program.cs` ```cs using System; namespace NestedForLoops { class Program { static void Main(string[] args) { var a1 = new string[] { "A", "B", "C" }; var a2 = new string[] { "A", "B", "C" }; for (int i=0; i<a1.Length; i++) { for (int j=0; j<a2.Length; j++) { Console.WriteLine(a1[i] + a2[j]); } } } } } ``` 在此示例中,我們創建了兩個數組的笛卡爾乘積。 ```cs var a1 = new string[] { "A", "B", "C" }; var a2 = new string[] { "A", "B", "C" }; ``` 我們有兩個數組。 每個數組都有樹字母。 凱氏積是當一個數組中的每個元素與另一數組中的所有元素配對時。 為此,我們使用嵌套的`for`循環。 ```cs for (int i=0; i<a1.Length; i++) { for (int j=0; j<a2.Length; j++) { Console.WriteLine(a1[i] + a2[j]); } } ``` 在另一個父 for 循環中有一個嵌套的 for 循環。 嵌套的 for 循環在父 for 循環的每個循環中完全執行。 ```cs $ dotnet run AA AB AC BA BB BC CA CB CC ``` 這是輸出。 ## C# `foreach`語句 `foreach`構造簡化了遍歷數據集合的過程。 它沒有明確的計數器。 `foreach`語句一個接一個地遍歷數組或集合,并將當前值復制到構造中定義的變量中。 `Program.cs` ```cs using System; namespace ForeachStatement { class Program { static void Main(string[] args) { string[] planets = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune" }; foreach (string planet in planets) { Console.WriteLine(planet); } } } } ``` 在此示例中,我們使用`foreach`語句遍歷一系列行星。 ```cs foreach (string planet in planets) { Console.WriteLine(planet); } ``` `foreach`語句的用法很簡單。 `planets`是我們迭代通過的數組。 `planet`是一個臨時變量,具有數組中的當前值。 `foreach`語句遍歷所有行星并將它們打印到控制臺。 ```cs $ dotnet run Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune ``` 運行程序將給出此輸出。 ## C# `break`語句 `break`語句可用于終止由`while`,`for`或`switch`語句定義的塊。 `Program.cs` ```cs using System; namespace BreakStatement { class Program { static void Main(string[] args) { var random = new Random(); while (true) { int num = random.Next(1, 30); Console.Write("{0} ", num); if (num == 22) { break; } } Console.Write('\n'); } } } ``` 我們定義了一個無限的`while`循環。 我們使用`break`語句退出此循環。 我們從 1 到 30 中選擇一個隨機值。我們打印該值。 如果該值等于 22,則結束無窮的`while`循環。 ```cs $ dotnet run 18 3 21 26 12 27 23 25 2 21 15 4 18 12 24 13 7 19 10 26 5 22 ``` 我們可能會得到這樣的東西。 ## C# `continue`語句 `continue`語句用于跳過循環的一部分,并繼續循環的下一個迭代。 它可以與`for`和`while`語句結合使用。 在下面的示例中,我們將打印一個數字列表,這些數字不能除以 2 而沒有余數。 `Program.cs` ```cs using System; namespace ContinueStatement { class Program { static void Main(string[] args) { int num = 0; while (num < 1000) { num++; if ((num % 2) == 0) { continue; } Console.Write("{0} ", num); } Console.Write('\n'); } } } ``` 我們使用`while`循環遍歷數字`1..999`。 ```cs if ((num % 2) == 0) { continue; } ``` 如果表達式`num % 2`返回 0,則可以將所討論的數字除以 2。執行`continue`語句,并跳過循環的其余部分。 在我們的例子中,循環的最后一條語句將被跳過,并且數字不會輸出到控制臺。 下一個迭代開始。 在 C# 教程的這一部分中,我們介紹了 C# 控件流結構。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看