.net 可枚举类型的构建方法

数组可以使用foreach遍历数组,其实只要实现GetEnumertor方法的类型都可以使用foreach结构遍历数组。

首先看下代码:

    //笔类
public class Pencil
{
public string Color { get; set; } public int Num { get; set; }
} //笔盒类
public class PencilBox
{
private Pencil[] pencil = new Pencil[];//应该使用泛型,这里做演示 public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
}
}

如果想对PencilBox进行遍历呢?可枚举类型构建的两种方式(非泛型):实现IEnumerable接口、yield迭代器方法

实现IEnumerable接口

     public class PencilBox: IEnumerable//实现IEnumerable接口
{
private Pencil[] pencil = new Pencil[]; public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
} //实现GetEnumerator方法,
//这里System.Array已经实现了IEnumerable、IEnumerator接口可以简单委托请求道System.Array
public IEnumerator GetEnumerator()
{
return pencil.GetEnumerator();
}
}

yield迭代器方法

 public class PencilBox//不用实现IEnumerable接口
{
private Pencil[] pencil = new Pencil[]; public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
} //实现GetEnumeratore方法,返回值必须为IEnumerator
//使用yield return语法返回对象,yield关键字用来向调用方的foreach返回值
//当达到yield return语句后,当前位置存储起来,下次使用迭代器时会从该位置开始执行
public IEnumerator GetEnumerator()
{
foreach (Pencil pencil1 in pencil)
{
yield return pencil1;
}
}
}

yield 迭代器方法也可以实现可选择迭代,返回局部数据

   //笔盒类
public class PencilBox//不用实现IEnumerable接口
{
private Pencil[] pencil = new Pencil[]; public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
pencil[] = new Pencil() { Color = "Blue", Num = }; } //实现GetEnumeratore方法,返回值必须为IEnumerator
public IEnumerator GetEnumerator()
{
yield return pencil[];
yield return pencil[];
}
}

yield迭代器也可以带参数,当带参数时返回的是IEnumerable,而不是IEnumerator类型

 //笔盒类
public class PencilBox//不用实现IEnumerable接口
{
private Pencil[] pencil = new Pencil[]; public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
pencil[] = new Pencil() { Color = "Blue", Num = }; } //可随意命方法名
//返回IEnumerable类型,而不是IEnumerator 类型
public IEnumerable GetEnumerator(int num)
{
foreach (Pencil pencil1 in pencil)
{
if (pencil1.Num > num)
{
yield return pencil1;
}
}
}
} 调用代码:

PencilBox pb=new PencilBox();
foreach (Pencil p in pb.GetEnumerator(1))
{
Console.WriteLine(p.Color);
}

上一篇:awk知识点全回顾


下一篇:从零开始学android开发- 应用程序窗体显示状态操作requestWindowFeature