构建可枚举类型(IEnumerable和IEnumerator接口)
来源:互联网 发布:arma预测模型 软件 编辑:程序博客网 时间:2024/05/18 00:34
1.IEnumberable接口
public interface IEnumberable
{
IEnumerator GetEnumerator(); //返回对另一个接口的引用IEnumerator
}
2.IEnumerator接口
public interface IEnumerator
{
bool MoveNext(); //将光标的内部位置向前移动
object Current { get; } //获取当前的项
void Reset(); //将光标重置到第一个成员前面
}
3.实现可枚举类型
public class MyClass1
{
public string Name { get; set; }
public string Id { get; set; }
}
public class MyClass2:IEnumerable
{
private MyClass1[] carArray = new MyClass1[4];
public MyClass2()
{
carArray[0] = new MyClass1 { Name = "Test1", Id = "1" };
carArray[1] = new MyClass1 { Name = "Test2", Id = "2" };
carArray[2] = new MyClass1 { Name = "Test3", Id = "3" };
}
public IEnumerator GetEnumerator()
{
return new MyClass3(carArray);
}
}
public class MyClass3:IEnumerator
{
private MyClass1[] myCls1 = null;
private int count = 0;
public MyClass3(MyClass1[] myCls1)
{
this.myCls1 = myCls1;
}
public object Current
{
get { return myCls1[count]; }
}
public bool MoveNext()
{
count = count+1;
if (count >= myCls1.Length)
{
return false;
}
else
{
return true;
}
}
public void Reset()
{
count = 0;
}
}
public class MyClass4
{
private void Func1()
{
MyClass2 cls2 = new MyClass2();
foreach (MyClass1 item in cls2)
{
item.Name = "1";
item.Id = "20";
}
}
}
4.使用yield关键字构建迭代器方法
public class MyClass2 : IEnumerable
{
private MyClass1[] carArray = new MyClass1[4];
public MyClass2()
{
carArray[0] = new MyClass1 { Name = "Test1", Id = "1" };
carArray[1] = new MyClass1 { Name = "Test2", Id = "2" };
carArray[2] = new MyClass1 { Name = "Test3", Id = "3" };
}
public IEnumerator GetEnumerator()
{
//return new MyClass3(carArray);
foreach (MyClass1 cls1 in carArray)
{
yield return cls1;
}
}
}
编译器帮我们生成了相关的类
- 构建可枚举类型(IEnumerable和IEnumerator接口)
- IEnumerable 和 IEnumerator 接口
- IEnumerable 和 IEnumerator 接口
- IEnumerable 和 IEnumerator 接口
- IEnumerable和IEnumerator接口
- IEnumerable 和 IEnumerator 接口
- IEnumerable和IEnumerator枚举器
- 使用IEnumerable和IEnumerator接口
- 小談IEnumerable和IEnumerator接口
- 实现IEnumerable 和 IEnumerator, 使类型具备枚举功能的注意事项
- IEnumerable接口与IEnumerator
- IEnumerable及IEnumerator接口
- 笔记:IEnumerable和IEnumerator(包括泛型版)
- 笔记:IEnumerable和IEnumerator(包括泛型版)
- IEnumerable和IEnumerator区别
- IEnumerable和IEnumerator区别
- IEnumerator和IEnumerable区别
- IEnumerable和IEnumerator 详解
- 提高C++程序运行效率的10个简单方法
- ZOJ 1076 Gene Assembly
- 发送xml数据和调用webservice
- maven 热部署项目
- SpringMVC拦截器
- 构建可枚举类型(IEnumerable和IEnumerator接口)
- 20160308
- libuv和libev的区别
- Spring客户端设备检测识别
- JS判断客户端是手机还是PC的2个代码
- 大学毕业需要注意的事项
- Visio画UML用例图没有include关系的解决方法
- Python3.5.1与pyopengl3.1.0环境配置
- 快速排序(Quick Sort)