反向迭代:依靠Reverse属性
/// <summary>
/// 下面演示反向迭代 说白了就是迭代是从后面开始的 反向迭代器是在Reverse属性当中实现的
/// </summary>
public class MyColletion4:IEnumerable
{
private object[] items;
public MyColletion4(object []temps)
{
this.items = temps;
}
//一般的正向迭代
public IEnumerator GetEnumerator()
{
for(int index=0;index<items.Length;index++)
{
yield return items[index];
}
}
//实现反向迭代
public IEnumerable Reverse //注意返回IEnumerable对象
{
get
{
for (int index = items.Length - 1; index > -1; index--)
{
yield return items[index];
}
}
}
}
////
MyColletion4 collection4 = new MyColletion4(new object[] { 1, 2, 3, 4 });
foreach (var v in collection4)
{
Console.WriteLine(v);
}
//反向迭代
foreach(var v in collection4.Reverse)
{
Console.WriteLine(v);
}
//迭代结果是 4 3 2 1
当然也有一个临时集合,顺便补充一下,迭代和枚举实现的方案很多,一个返回IEnumerable的方法中加上迭代器块也是一个迭代集合
具体看下面的代码
//还有一种最为简单的迭代 就是一个返回IEnumerable对象的方法 在这方法中写上迭代器
//在此补充一个临时集合 关键看代码怎么写(以枚举当前月份的日期为列子)
public static IEnumerable GetMonthDate()
{
DateTime dt = DateTime.Now;
int currentMonth = dt.Month;
while(currentMonth==dt.Month)
{
string temp = currentMonth.ToString() + "/" + dt.Day.ToString();
dt = dt.AddDays(1);
yield return temp;
}
}
///实现
foreach(var v in GetMonthDate())
{
Console.WriteLine(v);
}
这儿 我作为一个新手自己给自己总结一下可枚举类型和接口的含义:
可枚举类型(集合&数组等):
在实际开发当中,可以自己去定义一些与集合差不多的类型,对该类型的元素的访问,用一般的while,for循环比较不方便,我们需要自己去定义一个枚举器。
枚举类型(继承IEnumerable接口):包括一个集合元素和一个枚举器。
枚举器是枚举类型当中的一个嵌套类(继承了IEnumerator接口):具体实现见上。
/////// 这样便可以让自定义的可枚举类型实现foreach迭代。
当然也可以直接利用迭代来实现上面两个接口。//////










