C# 通过实现IEnumerable/IEnumerator接口 完成foreach遍历
2012-02-25 00:00
330 查看
将IEnumerable看做一个类工厂,IEnumerator是一个迭代器对象,通过类工厂生产一个迭代器返回该迭代器对象接口,由foreach执行迭代器完成遍历查询。如果熟悉设计模式中的类工厂模式,是很容易理解c#中这个概念的~
MyEnumerable 类:
using System;
using System.Collections;
using System.Linq;
using System.Text;
namespace EnumerableTest
{
public class MyEnumerable : IEnumerable, IEnumerator
{
private int iIndex;
private CellInfo[] points;
public MyEnumerable(int num)
{
this.iIndex = -1;
points = new CellInfo[num];
for (int i = 0; i < num; i++)
{
points[i] = new CellInfo() { Name = ("my name" + i), Age = i };
}
}
public IEnumerator GetEnumerator()//
可以看做一个工厂 生产一个迭代器
{
return (IEnumerator)this;
}
int index = -1;
public void Reset()
{
index = -1;
}
public object Current
{
get
{
return points[index];
}
}
public bool MoveNext()
{
index++;
return index < points.Length ? true : false;
}
}
}
program类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EnumerableTest
{
class Program
{
static void Main(string[] args)
{
MyEnumerable enumerable = new MyEnumerable(10);
foreach (CellInfo item in enumerable)
{
Console.WriteLine(item.Name+" "+item.Age);
}
Console.Read();
}
}
}
MyEnumerable 类:
using System;
using System.Collections;
using System.Linq;
using System.Text;
namespace EnumerableTest
{
public class MyEnumerable : IEnumerable, IEnumerator
{
private int iIndex;
private CellInfo[] points;
public MyEnumerable(int num)
{
this.iIndex = -1;
points = new CellInfo[num];
for (int i = 0; i < num; i++)
{
points[i] = new CellInfo() { Name = ("my name" + i), Age = i };
}
}
public IEnumerator GetEnumerator()//
可以看做一个工厂 生产一个迭代器
{
return (IEnumerator)this;
}
int index = -1;
public void Reset()
{
index = -1;
}
public object Current
{
get
{
return points[index];
}
}
public bool MoveNext()
{
index++;
return index < points.Length ? true : false;
}
}
}
program类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EnumerableTest
{
class Program
{
static void Main(string[] args)
{
MyEnumerable enumerable = new MyEnumerable(10);
foreach (CellInfo item in enumerable)
{
Console.WriteLine(item.Name+" "+item.Age);
}
Console.Read();
}
}
}
相关文章推荐
- C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能
- C# 通过接口IEnumerator让自己编写的对象/类,实现foreach遍历方法
- 如何实现IEnumerable<T>和IEnumerator接口,一个ASP.NET MVC日志模型的实现
- C#中实现zip协议,通过WebRequest查询zip文件内容。统一访问接口
- c#通过反射查找接口的实现 并创造实例
- C#如何实现自定义集合的IEnumerable 和 IEnumerator 接口并使用foreach访问自定义集合
- c#中foreach与接口IEnumerator和IEnumerable
- c#通过反射查找接口的实现 并创造实例
- C#基础知识系列九(对IEnumerable和IEnumerator接口的糊涂认识)
- Jack's Notes5——foreach的本质(通过IEnumerable接口实现遍历)
- c#实现Foreach枚举_IEnumerable和IEnumerator
- c#中foreach与接口IEnumerator和IEnumerable
- C# 自定义类型通过实现IFormattable接口,来输出指定的格式和语言文化的字符串(例:DateTime)
- C#初学者——通过ICommad接口实现mxd的打开、保存、放大、缩小、平移、全局显示、前后视图等
- C# 反射-通过继承接口实现创建对象并调用方法
- 改进C#代码之22:通过定义并实现接口替代继承
- C#通过显示接口实现解决命名冲突
- 《Effective C#》读书笔记——条目22:通过定义并实现接口替代继承<使用C#表达设计>
- 实现了IEnumerable接口的GetEnumerator 即可使用 Foreach遍历,返回一个IEnumerator对象
- C#实现接口IHttpModule完成统一的权限验证