結構篇:
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型別,它繼...