<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 如何:使用 foreach 訪問集合類(C# 編程指南) 下面的代碼示例演示如何編寫可與 [foreach](https://msdn.microsoft.com/zh-cn/library/ttw7t8t6.aspx) 結合使用的非泛型集合類。該示例定義了字符串 tokenizer 類。 | ![](https://box.kancloud.cn/2016-01-31_56adb62c1380a.jpg) 注意 | | :-- | | 此示例描述的是僅當您無法使用泛型集合類時才采用的推薦做法。有關如何實現支持 [IEnumerable&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/9eekhta0.aspx) 的類型安全的泛型集合類,請參見[迭代器(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-cn/library/dscyy5s0.aspx)。 | 在該示例中,以下代碼段使用 Tokens 類通過“ ”和“-”分隔符將句子“This is a sample sentence.”分成若干標記。該代碼然后使用 **foreach** 語句顯示這些標記。 ``` Tokens f = new Tokens("This is a sample sentence.", new char[] {' ','-'}); // Display the tokens. foreach (string item in f) { System.Console.WriteLine(item); } ``` 在內部,Tokens 類使用數組存儲這些標記。因為數組可實現 [IEnumerator](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.aspx) 和 [IEnumerable](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.aspx),所以代碼示例使用了數組的枚舉方法([GetEnumerator](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.getenumerator.aspx)、[MoveNext](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.movenext.aspx)、[Reset](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.reset.aspx) 和 [Current](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.current.aspx)),而不是在 Tokens 類中定義這些方法。方法定義包括在該示例中,以明確如何定義它們以及每個定義的內容。 ``` using System.Collections; // Declare the Tokens class. The class implements the IEnumerable interface. public class Tokens : IEnumerable { private string[] elements; Tokens(string source, char[] delimiters) { // The constructor parses the string argument into tokens. elements = source.Split(delimiters); } // The IEnumerable interface requires implementation of method GetEnumerator. public IEnumerator GetEnumerator() { return new TokenEnumerator(this); } // Declare an inner class that implements the IEnumerator interface. private class TokenEnumerator : IEnumerator { private int position = -1; private Tokens t; public TokenEnumerator(Tokens t) { this.t = t; } // The IEnumerator interface requires a MoveNext method. public bool MoveNext() { if (position < t.elements.Length - 1) { position++; return true; } else { return false; } } // The IEnumerator interface requires a Reset method. public void Reset() { position = -1; } // The IEnumerator interface requires a Current method. public object Current { get { return t.elements[position]; } } } // Test the Tokens class. static void Main() { // Create a Tokens instance. Tokens f = new Tokens("This is a sample sentence.", new char[] {' ','-'}); // Display the tokens. foreach (string item in f) { System.Console.WriteLine(item); } } } /* Output: This is a sample sentence. */ ``` 在 C# 中,集合類不必通過實現 [IEnumerable](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.aspx) 和 [IEnumerator](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.aspx) 來與 **foreach** 兼容。如果此類具有所需的 [GetEnumerator](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.getenumerator.aspx)、[MoveNext](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.movenext.aspx)、[Reset](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.reset.aspx) 和 [Current](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.current.aspx) 成員,則可與 **foreach** 結合使用。省略接口有一個好處:即,您可以比 [Object](https://msdn.microsoft.com/zh-cn/library/system.object.aspx) 更為具體地定義 Current 的返回類型。這會提供類型安全。 例如,可更改上述示例中的以下行。 ``` // Change the Tokens class so that it no longer implements IEnumerable. public class Tokens { // . . . // Change the return type for the GetEnumerator method. public TokenEnumerator GetEnumerator() { } // Change TokenEnumerator so that it no longer implements IEnumerator. public class TokenEnumerator { // . . . // Change the return type of method Current to string. public string Current { } } } ``` 由于 Current 返回字符串,因此編譯器能夠檢測何時在 **foreach** 語句中使用了不兼容的類型,如以下代碼所示。 ``` // Error: Cannot convert type string to int. foreach (int item in f) ``` 省略 [IEnumerable](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.aspx) 和 [IEnumerator](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.aspx) 的缺點是:集合類不再與其他公共語言運行時語言的 **foreach** 語句或等效語句交互。 ## 請參閱 [System.Collections.Generic](https://msdn.microsoft.com/zh-cn/library/system.collections.generic.aspx) [C# 參考](https://msdn.microsoft.com/zh-cn/library/618ayhy6.aspx) [C# 編程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [數組(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/9b9dty7d.aspx) [集合(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-cn/library/ybcx56wz.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>

                              哎呀哎呀视频在线观看