我們對foreach迴圈並不陌生,在c#中我們用得非常多,但是我們是否清楚foreach迴圈的本質呢? 眾所周知,foreach迴圈能夠遍歷 陣列 ,集合 。但是我們自己定義的乙個類是否能夠通過foreach迴圈遍歷出來呢?
foreach能夠遍歷的資料型別都是實現了 ienumerable 介面的 意思就是說 只要我自定義的類實現了 ienumberable介面 我都能夠通過foreach來迴圈遍歷
下面舉乙個簡單的例子
首先自定義乙個類 並實現 ienumberable 介面
在mylist類中,實現了ienumberable介面後 必須 實現其中的 getenumberator()方法 而getenumberato方法中的返回值型別是 ienumberator介面 型別
所以我們就自然而然想到了定義乙個類 來實現 ienumberator介面 利用黎克特制替換原則 返回子類型別
publicclass
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迴圈實現
staticvoid 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與...