<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 功能強大 支持多語言、二開方便! 廣告
                # yield(C# 參考) 如果你在語句中使用 **yield** 關鍵字,則意味著它在其中出現的方法、運算符或 **get** 訪問器是迭代器。通過使用 **yield** 定義迭代器,可在實現自定義集合類型的 [IEnumerable](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerable.aspx) 和 [IEnumerator](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerator.aspx) 模式時無需其他顯式類(保留枚舉狀態的類,有關示例,請參閱 [IEnumerator&lt;T&gt;](https://msdn.microsoft.com/zh-CN/library/78dfe2yb.aspx))。 下面的示例演示了 **yield** 語句的兩種形式。 ``` yield return <expression>; yield break; ``` ## 備注 使用 **yield return** 語句可一次返回一個元素。 通過 [foreach](https://msdn.microsoft.com/zh-CN/library/ttw7t8t6.aspx) 語句或 LINQ 查詢來使用迭代器方法。 **foreach** 循環的每次迭代都會調用迭代器方法。迭代器方法運行到 **yield return** 語句時,會返回一個 _expression_,并保留當前在代碼中的位置。 當下次調用迭代器函數時執行從該位置重新啟動。 可以使用 **yield break** 語句來終止迭代。 有關迭代器的詳細信息,請參閱[迭代器(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dscyy5s0.aspx)。 ### 迭代器方法和 get 訪問器 迭代器的聲明必須滿足以下要求: * 返回類型必須為 [IEnumerable](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerable.aspx)、[IEnumerable&lt;T&gt;](https://msdn.microsoft.com/zh-CN/library/9eekhta0.aspx)、[IEnumerator](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerator.aspx) 或 [IEnumerator&lt;T&gt;](https://msdn.microsoft.com/zh-CN/library/78dfe2yb.aspx)。 * 該聲明不能有任何 [ref](https://msdn.microsoft.com/zh-CN/library/14akc2c7.aspx) 或out [https://msdn.microsoft.com/zh-CN/library/t3c3bfhx.aspx](https://msdn.microsoft.com/zh-CN/library/t3c3bfhx.aspx) 參數。 返回 [IEnumerable](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerable.aspx) 或 [IEnumerator](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerator.aspx) 的迭代器的 **yield** 類型為 **object**。如果迭代器返回 [IEnumerable&lt;T&gt;](https://msdn.microsoft.com/zh-CN/library/9eekhta0.aspx) 或 [IEnumerator&lt;T&gt;](https://msdn.microsoft.com/zh-CN/library/78dfe2yb.aspx),則必須將 **yield return** 語句中的表達式類型隱式轉換為泛型類型參數。 你不能在具有以下特點的方法中包含 **yield return** 或 **yield break** 語句: * 匿名方法。有關詳細信息,請參閱[匿名方法(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/0yw3tz5k.aspx)。 * 包含不安全的塊的方法。有關詳細信息,請參閱[unsafe(C# 參考)](https://msdn.microsoft.com/zh-CN/library/chfa2zb8.aspx)。 ### 異常處理 不能將 **yield return** 語句置于 try-catch 塊中。可將 **yield return** 語句置于 try-finally 語句的 try 塊中。 yield break 語句可以位于 try 塊或 catch 塊,但不能位于 finally 塊。 如果 **foreach** 主體(在迭代器方法之外)引發異常,則將執行迭代器方法中的 **finally** 塊。 ### 技術實現 以下代碼從迭代器方法返回 **IEnumerable&lt;string&gt;**,然后遍歷其元素。 ``` IEnumerable<string> elements = MyIteratorMethod(); foreach (string element in elements) { … } ``` 調用 MyIteratorMethod 并不執行該方法的主體。相反,該調用會將 **IEnumerable&lt;string&gt;** 返回到 elements 變量中。 在 **foreach** 循環迭代時,將為 elements 調用 [MoveNext](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerator.movenext.aspx) 方法。此調用將執行 MyIteratorMethod 的主體,直至到達下一個 **yield return** 語句。 **yield return** 語句返回的表達式不僅決定了循環體使用的 element 變量值,還決定了元素的 [Current](https://msdn.microsoft.com/zh-CN/library/58e146b7.aspx) 屬性(它是 **IEnumerable&lt;string&gt;**)。 在 **foreach** 循環的每個后續迭代中,迭代器主體的執行將從它暫停的位置繼續,直至到達 **yield return** 語句后才會停止。在到達迭代器方法的結尾或 **yield break** 語句時,**foreach** 循環便已完成。 下面的示例包含一個位于 **for** 循環內的 **yield return** 語句。 Process 中的 **foreach** 語句體的每次迭代都會創建對 Power 迭代器函數的調用。對迭代器函數的每個調用將繼續到 **yield return** 語句的下一次執行(在 **for** 循環的下一次迭代期間發生)。 迭代器方法的返回類型是 [IEnumerable](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerable.aspx)(一種迭代器接口類型)。當調用迭代器方法時,它將返回一個包含數字冪的可枚舉對象。 ``` public class PowersOf2 { static void Main() { // Display powers of 2 up to the exponent of 8: foreach (int i in Power(2, 8)) { Console.Write("{0} ", i); } } public static System.Collections.Generic.IEnumerable<int> Power(int number, int exponent) { int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; yield return result; } } // Output: 2 4 8 16 32 64 128 256 } ``` 下面的示例演示一個作為迭代器的 **get** 訪問器。在該示例中,每個 **yield return** 語句返回一個用戶定義的類的實例。 ``` public static class GalaxyClass { public static void ShowGalaxies() { var theGalaxies = new Galaxies(); foreach (Galaxy theGalaxy in theGalaxies.NextGalaxy) { Debug.WriteLine(theGalaxy.Name + " " + theGalaxy.MegaLightYears.ToString()); } } public class Galaxies { public System.Collections.Generic.IEnumerable<Galaxy> NextGalaxy { get { yield return new Galaxy { Name = "Tadpole", MegaLightYears = 400 }; yield return new Galaxy { Name = "Pinwheel", MegaLightYears = 25 }; yield return new Galaxy { Name = "Milky Way", MegaLightYears = 0 }; yield return new Galaxy { Name = "Andromeda", MegaLightYears = 3 }; } } } public class Galaxy { public String Name { get; set; } public int MegaLightYears { get; set; } } } ``` ## C# 語言規范 有關詳細信息,請參閱 [C# 語言規范](https://msdn.microsoft.com/zh-CN/library/ms228593.aspx)。該語言規范是 C# 語法和用法的權威資料。 ## 請參閱 [C# 參考](https://msdn.microsoft.com/zh-CN/library/618ayhy6.aspx) [C# 編程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [foreach,in(C# 參考)](https://msdn.microsoft.com/zh-CN/library/ttw7t8t6.aspx) [迭代器(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dscyy5s0.aspx)
                  <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>

                              哎呀哎呀视频在线观看