构建可枚举类型(IEnumerable和IEnumerator接口)
2016-03-08 23:19
387 查看
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;
}
}
}
编译器帮我们生成了相关的类
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;
}
}
}
编译器帮我们生成了相关的类
相关文章推荐
- Gulp实现web服务器
- 蓝桥杯:剪格子
- 高性能MySQL主从复制
- 杭电2089~不要62
- 【Eclipse】1、eclipse软件下载
- 正则--match
- 正则表达式----search
- 一种更清晰的 Android 架构
- [转]考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
- 5-3 逆序的三位数
- BZOJ 1008 越狱
- Jquery插件
- tomcat启动后访问应用超时问题
- kali windows双系统安装!
- 冒泡排序
- iOS_XCode7_Launch Image 的初使用
- 安装php过程中的错误和解决方式 configure: error: jpeglib.h not found
- 软件工程
- 删除多级目录下的一类文件
- 运用Xcode将项目打包成ipa