Foreach能夠迴圈的本質

2022-04-11 22:03:56 字數 1316 閱讀 7361

我們對foreach迴圈並不陌生,在c#中我們用得非常多,但是我們是否清楚foreach迴圈的本質呢? 眾所周知,foreach迴圈能夠遍歷 陣列  ,集合 。但是我們自己定義的乙個類是否能夠通過foreach迴圈遍歷出來呢?

foreach能夠遍歷的資料型別都是實現了 ienumerable 介面的  意思就是說 只要我自定義的類實現了  ienumberable介面  我都能夠通過foreach來迴圈遍歷

下面舉乙個簡單的例子

首先自定義乙個類 並實現  ienumberable 介面

在mylist類中,實現了ienumberable介面後 必須  實現其中的  getenumberator()方法  而getenumberato方法中的返回值型別是  ienumberator介面 型別

所以我們就自然而然想到了定義乙個類  來實現  ienumberator介面   利用黎克特制替換原則  返回子類型別

public

class

mylist:ienumerable

//實現ienumerable介面的getenumerator()方法

public

ienumerator getenumerator()

}

///

///實現 ienumberyor介面時 必須實現該介面的 所有方法 即 current() : 返回乙個集合中的一項的值

///movenext() : 系統自動呼叫movenext()方法

///reset() : 系統會在movenext方法返回乙個false值的時候自動呼叫 將索引值重置

/// public

class

mytool : ienumerator

int i = -1;//

給定初始位置 表示第一條資料之前

//current屬性

public

object

current

}//自動呼叫movenext方法 呼叫下一條記錄

public

bool

movenext()

return

result;

}public

void

reset()

}

以上  foreach 迴圈的 本質  就是這些了

以下**就是實現自定義類  用foreach迴圈實現

static

void main(string

args)

console.readkey();

}

增強for迴圈 foreach迴圈

1 作用 簡化迭代器的書寫格式。注意 foreach迴圈的底層還是使用了迭代器遍歷。2 適用範圍 如果是實現了iterable介面的物件或者是陣列物件都可以使用foreach迴圈。3 格式 for 資料型別 變數名 遍歷的目標 示例 1 public static void main string ...

foreach迴圈(增強for迴圈)

1 foreach迴圈本質上是迭代器遍歷,簡化了迭代器遍歷的書寫方式 2 適用於實現了iterable介面的物件或者陣列物件 3 格式為 for 資料型別 變數名 迴圈目標 foreach迴圈 for string it set foreach缺點 1 不能對集合進行增刪操作 foreach迴圈底層...

for迴圈和foreach迴圈的比較

1.在固定長度或者長度不需要計算的時候for迴圈效率高於foreach,foreach在迴圈次數未知或者計算起來較複雜有損效能的情況下效率比for迴圈高。2.foreach適用於只是進行集合或陣列遍歷,for則在較複雜的迴圈中效率更高。什麼是複雜環境呢?就是要對原陣列進行修改時。3.foreach與...