C# foreach語句


一、C# foreach語句

foreach語句能夠對實現Ienumerable接口的容器進行遍歷,並提供一個枚舉器來實現Ienumerable接口。foreach語句為數組或對象集合中的各個元素執行一個嵌入語句組。

另外,它還可用於循環訪問集合以獲取所需信息,但不能應用於更改集合內容以避免產生不可預知的副作用。

語法格式如下:

foreach(type identifier in expression)
{
    embedded-statement
}

type(類型)和identifier(標識符)用於聲明循環變量,expression(表達式)對應集合。

每執行一次內嵌語句,循環變量就依次取集合中的一個元素代入其中。在這里,循環變量是一個只讀型局部變量,如果試圖改變它的值或將它作為一個ref或out類型的參數傳遞,都將引發編譯時錯誤。

foreach語句中的expression必須是集合類型,如果該集合的元素類型與循環變量類型不一致,則必須有一個顯式定義的從集合中的元素類型到循環變量元素類型的顯式轉換。

foreach語句的執行順序如下:

(1)計算集合表達式的值並生成一種集合類型的實例。

(2)調用集合的GetEnumerator方法得到一個枚舉實例的值,返回的枚舉值將存放在一個臨時局部變量中。

(3)調用臨時局部變量的MoveNext方法,以獲取下一個枚舉元素。

(4)如果MoveNext方法的返回值為false,則表明已為集合中的所有元素完成循環,控制傳遞給foreach塊后的下一條語句,否則繼續執行。

(5)計算臨時局部變量的Current屬性以獲取當前枚舉值並將其轉換為foreach語句中規定的變量類型,並將結果存儲在迭代變量中,以便在循環體內可以訪問該變量的值。

(6)執行循環體包含的語句,然后轉到第(3)步開始下一輪循環。

二、提示

C#中集合類型的定義:

?集合類型必須支持一個形為GetEnumerator()的公有的非靜態方法,該方法的返回類型為結構、類或接口。
?形為GetEnumerator()的方法返回的結構、類或接口應當包含一個公有的非靜態的方法MoveNext(),該方法的返回類型為布爾型。
?形為GetEnumerator()的方法返回的結構、類或接口應當包含一個公有的非靜態的屬性Current,該屬性可以讀出。
如果一個類型同時滿足以上三個條件,該類型稱為集合類型。Current屬性的類型叫做該集合類型的元素類型。

foreach語句也支持數組類型,對於一維數組,執行順序是從下標為0的元素開始,一直到數組的最后一個元素;對於多維數組,元素下標的遞增是從最右邊那一維開始的,依次類推。

同樣,break和continue可以出現在foreach語句中,功能不變。

三、示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            // C# foreach語句-www.baike369.com
            int[] array = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            Console.Write("數組元素的值為:");
            foreach (int elementArray in array)
            {
                Console.Write("{0} ", elementArray);
            }
            Console.ReadLine();
        }
    }
}

運行結果:

數組元素的值為:0 1 2 3 4 5 6 7 8 9

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM