IEnumerable
IEnumerable
二.IEnumerable和IEnumerable
主要实现 public IEnumerator
C# 1.0中的foreach
没有迭代器的时候,创建一个可用于foreach的集合(C# 1.0):
public class MyCollection : IEnumerable
{
public MyEnumerator GetEnumerator()
{
return new MyEnumerator(this);
}
public class MyEnumerator : IEnumerator
{
public void Reset(){...}
public bool MoveNext(){...}
public int Current{ get{...} }
object IEnumerator.Current{ get{...} }
}
}
对集合使用foreach语句:
foreach(int i in col){...}
相单于:
IEnumerator etor = ((IEnumerable)col).GetEnumerator();
try
{
while(etor.MoveNext())
{
ElementType clem (ElementType)etor.Current;
...;
}
}
finally{(IDisposable)enumerator).Dispose();}
C# 2.0 中的迭代器
使用迭代器创建于foreach的集合(C# 2.0):
public class Stack
{
T[] items;
int count;
public void Push(T data){...}
public T Pop(){...}
public IEnumerator
{
for(int i=count-1;i>=0;--i)
{
yield return items[i];
}
}
}
使用foreach语句:
Stack
foreach(int i in statck){...}
//将数据源中的数据都转换为IEnumerable类型,用作数据绑定 //其中_dataSource为数据源,DataMember为要找的数据名称 protected virtual IEnumerable GetDataSource() IListSource listSource = _dataSource as IListSource; ITypedList typedMemberList = memberList as ITypedList; if(memberProperty != null) if(list is IEnumerable) |