2015年10月5日 星期一

{C#}實作IEnumerable 介面 讀出列舉陣列

下列示範在MVC架構中,實作IEnumerable介面
在Yahoo 字典中,Enumerable的意思是「可列舉的」adj.
主要就是把一個集合中的資料一 一讀出的運作流程

1.首先建立一個Class 並繼承Franmework的IEnumerable介面
在IEnumerable介面上只有一個Function
這可以從MSDN上可以看到
https://msdn.microsoft.com/zh-tw/library/system.collections.ienumerable(v=vs.110).aspx
接著開始寫自已的列舉器

//1.繼承IEnumerable
//資料結構中的資料,是否可被列舉
public class IEnumeratorClass:IEnumerable {
private string[] EmployeeList = { "John", "Jay", "Bobo" };
//IEnumerable界面下的function
public IEnumerator GetEnumerator()
{ return new EmployeeEnumerator(this); }
//2.自定義「資料結構實作的列舉器」
public class EmployeeEnumerator : IEnumerator
{ //元素
string[] _elements;
//指標
int _flag = -1;
//建構子
public EmployeeEnumerator(IEnumeratorClass source) { _elements = source.EmployeeList; }
//實作Reset Void 重新設定Flag
public void Reset() { this._flag = -1; }
//實作Current 回傳當前的值
public object Current { get { if (this._flag == -1 || this._flag > this._elements.Length) { //Exception throw new InvalidOperationException(); } return this._elements[this._flag]; } }
//指標移至下一筆是否可行
public bool MoveNext() { if (this._flag + 1 == this._elements.Length) return false; else { this._flag++; return true; } }
//取資料結束後,要做任何Release、關閉資料庫連結等覆寫
public void Dispose() { } } }



在Controller中

public ContentResult EmployeeGet() { string allEmployee = ""; IEnumeratorClass employeeName = new IEnumeratorClass(); IEnumerator enumerator = employeeName.GetEnumerator(); //當可以移至下一筆時 while (enumerator.MoveNext()) { //Show出所有的集合資料 allEmployee += enumerator.Current; } return Content(allEmployee); }
參考資料:
http://xingulin.tumblr.com/post/48831985749/ienumerable-ienumerator