程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> foreach與IEnumerator

foreach與IEnumerator

編輯:.NET實例教程
都快2008年了,還是看到不少人在辛苦的用著IEnumerator遍歷某個數據結構。逢上foreach的“源代碼”,希望可以讓IEnumrator的funs徹底死心,呵呵。

還是反編譯(最近好上這個了,呵呵)如下的代碼:
ArrayList somelist = new ArrayList();
foreach(object o in somelist)
{
...
}

得到的IL代碼大致如下:
callvirt ...ArrayList::GetEnumerator()
...
callvirt ...IEnumerator::MoveNext()
...
brture.s 某個地址
...
callvirt ...Dispose()

上面的代碼依然被放到了try_finally塊裡面,由此可見foreach的源代碼應該如下:
IEnumerator ie = ArrayList.GetEnumerator();//此處代碼,隨使用的數據不同而不同,但是目的都是獲取IEnumerator接口
try
{
while(IE.MoveNext())
{
object o = IE.Current;
}
}
finally
{
IE.Dispose();
}

可見,foreach不僅僅是方便的遍歷了我們的數據結構,同時還進行了資源的釋放。如果手動調用IEnumerator的話,我相信很多人都沒有主動的調用Dispose吧。所以,foreach還是應該多多用啊。呵呵……
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved