C 中foreach的原理

2021-08-25 01:19:22 字數 1053 閱讀 6252

結構篇:

foreach 語句為陣列或物件集合中的每個元素重複乙個嵌入語句組。foreach 語句用於迴圈訪問集合以獲取所需資訊,但不應用於更改集合內容以避免產生不可預知的***。此語句的形式如下:

foreach (type identifier in expression) statement

其中:

type

identifier 的型別。

identifier

表示集合元素的迭代變數。如果迭代變數為值型別,則無法修改的唯讀變數也是有效的。

expression

物件集合或陣列表示式。集合元素的型別必須可以轉換為 identifier 型別。請不要使用計算為 null 的表示式。

而應計算為實現 ienumerable 的型別或宣告 getenumerator 方法的型別。在後一種情況中,getenumerator 應該要麼返回實現 ienumerator 的型別,要麼宣告 ienumerator 中定義的所有方法。

statement

要執行的嵌入語句。

原理篇:

在foreach迴圈中,迭代集合collectionobject的過程如下:

(1)呼叫collectionobject.getenumerator(),返回乙個ienumerator引用。這個方法可以通過ienumerable介面的實現**來獲得。但這是可選的。

(2)呼叫返回的ienumerator介面的movenext()方法。

(3)如果movenext()方法返回true,就使用ienumerator介面的current屬性獲取物件的乙個引用,用於foreach迴圈。

(4)重複前面兩步,直到movenext()方法返回false為止,此時迴圈停止。

替代foreach實現:

foreach (*** a in b)

等同於*** a;

ienumerator ie = (ienumable)b.getenumerator();

while (ie.movenext)

C 中foreach的實現原理

在 foreach如何內部如何實現這個問題之前,我們需要理解兩個 c 裡邊的介面,ienumerable與ie numerator.在c 裡邊的遍歷集合時用到的相關類中,ienumerable 是最基本的介面。這是乙個可以進行泛型化的介面,比如說 ienumerable.在微軟的 net 推出了這兩...

C 中foreach的實現原理

c 中foreach的實現原理 在 foreach如何內部如何實現這個問題之前,我們需要理解兩個c 裡邊的介面,ienumerable 與 ienumerator.在c 裡邊的遍歷集合時用到的相關類中,ienumerable是最基本的介面。這是乙個可以進行泛型化的介面,比如說ienumerable....

C 當中 foreach 的原理

在 c 當中的foreach語句實際上就是遍歷迭代器的語法糖。例如我們擁有以下 public class testclass foreach var int in integers 上述 結構十分簡單,作用就是遍歷integers陣列,並將其結果輸出到控制台當中。由於int是乙個array型別,它繼...