我們常用IEnumerable,卻忽視IEnumerator。簡單來說,IEnumerable是可以被循環遍歷的集合,IEnumerator實施循環遍歷。
接口分別是:
public interface IEnumerator{bool MoveNext();object Current{get;}void Reset();}public interface IEnumerable{IEnumerator GetEnumerator();}
來執行這樣簡單的一個控制臺程序。
class PRogram{static void Main(string[] args){IEnumerable<string> list = new List<string>() {"hello","world"};foreach (var item in list){Console.WriteLine(item);}Console.ReadKey();}}
在"解決方案資源管理器"中,右鍵控制臺項目,點擊"在文件資源管理器中打開文件"。
依次點擊"bin"和"Debug"文件夾。
復制下當前文件目錄。
打開開發人員命令提示。
由于應用程序文件在F盤,輸入如下:
導向到剛才復制的目錄,輸入如下:
查看當前目錄下的清單,輸入如下:
使用.NET的ILDASM反編譯應用程序文件,并輸入到某個txt文本中。輸入如下:
打開1.txt文件,輸入如下:
1.txt文件被打開,相關的IL代碼如下:
可見,foreach也是語法糖,當使用foreach循環遍歷的時候,實際上是調用IEnumerable的IEnumerator的方法。
所以,對于foreach,可以換種寫法:
class Program{static void Main(string[] args){IEnumerable<string> list = new List<string>() { "hello", "world" };IEnumerator it = list.GetEnumerator();while (it.MoveNext()){Console.WriteLine(it.Current);}Console.ReadKey();}}
新聞熱點
疑難解答