程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中的IEnumerable簡介及簡略完成實例

C#中的IEnumerable簡介及簡略完成實例

編輯:C#入門知識

C#中的IEnumerable簡介及簡略完成實例。本站提示廣大學習愛好者:(C#中的IEnumerable簡介及簡略完成實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中的IEnumerable簡介及簡略完成實例正文



#include<afxwin.h>//包括MFC頭文件
//從MFC的重要框架窗體派生用戶窗體類
class CMyWnd:public CFrameWnd
{
public:
 CMyWnd(LPCTSTR szTitle)
 {
  //挪用父類Create函數創立窗體
  Create(NULL,szTitle);
 }
};
//從MFC的運用法式派生用戶法式類
class CMyApp:public CWinApp
{
public:
 virtual BOOL InitInstance();
};
//籠罩繼續的運用法式初始化虛函數
BOOL CMyApp::InitInstance()
{
 //創立窗體並保留到m_pMainWnd中
 m_pMainWnd = new CMyWnd(_T("一個簡略的MFC法式"));
 m_pMainWnd->ShowWindow(m_nCmdShow);
 return TRUE;
}
CMyApp myApp;

s charlist : IEnumerable { public string TargetStr { get; set; } public charlist(string str) { this.TargetStr = str; } public IEnumerator GetEnumerator() { //c# 1.0 return new CharIterator(this.TargetStr); //c# 2.0 /* for (int index = this.TargetStr.Length; index > 0;index-- ) { yield return this.TargetStr[index - 1]; } */ } } class CharIterator : IEnumerator { public string TargetStr { get; set; } public int position { get; set; } public CharIterator(string targetStr) { this.TargetStr = targetStr; this.position = this.TargetStr.Length; } public object Current { get { if (this.position==-1||this.position==this.TargetStr.Length) { throw new InvalidOperationException(); } return this.TargetStr[this.position]; } } public bool MoveNext() { if (this.position!=-1) { this.position--; } return this.position > -1; } public void Reset() { this.position = this.TargetStr.Length; } } }


在下面的例子c# 1.0中,CharIterator就是迭代器的完成,position字段存儲以後的迭代地位,經由過程Current屬性可以獲得以後迭代地位的元素,MoveNext辦法用於更新迭代地位,而且檢查下一個迭代地位是否是有用的。

當我們經由過程VS單步驟試上面語句的時刻:

foreach (var c in charList)

代碼起首履行到foreach語句的charList處取得迭代器CharIterator的實例,然子女碼履行到in會挪用迭代器的MoveNext辦法,最初變量c會獲得迭代器Current屬性的值;後面的步調停止後,會開端一輪新的輪回,挪用MoveNext辦法,獲得Current屬性的值。

經由過程C# 1.0中迭代器的代碼看到,要完成一個迭代器就要完成IEnumerator接口,然後完成IEnumerator接口中的MoveNext、Reset辦法和Current屬性。

在C# 2.0中可以直接應用yield語句來簡化迭代器的完成。

如下面public IEnumerator GetEnumerator()辦法中正文失落的部門。
經由過程下面的代碼可以看到,經由過程應用yield return語句,我們可以調換失落全部CharIterator類。

yield return語句就是告知編譯器,要完成一個迭代器塊。假如GetEnumerator辦法的前往類型長短泛型接口,那末迭代器塊的生成類型(yield type)是object,不然就是泛型接口的類型參數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved