在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