IEnumerable和IEnumerator

您所在的位置:网站首页 不包含getenumerator IEnumerable和IEnumerator

IEnumerable和IEnumerator

2023-11-28 02:56| 来源: 网络整理| 查看: 265

IEnumerable接口只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象。IEnumerator对象是一个真正的集合访问器,没有它,就不能使用foreach语句遍历集合或数组,因为只有IEnumerator对象才能访问集合中的项,假如连集合中的项都访问不了,那么进行集合的循环遍历是不可能的事情了。IEnumerator接口定义了一个Current属性,MoveNext和Reset两个方法,既然IEnumerator对象时一个访问器,那至少应该有一个Current属性,来获取当前集合中的项MoveNext方法只是将游标的内部位置向前移动,简单来说就是移到一下个元素而已),要想进行循环遍历,就需要用到这个

 

IEnumerator:提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current返回的是object类型。

、在简单的web页面中

public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { test A = new test(); foreach (Ca c in A) { Label1.Text = Label1.Text + c.a.ToString() + c.b.ToString(); } } //public IEnumerable IEnumerable { get; set; }

public class test { Ca[] IEnum = new Ca[4]; //启动时填充一些Ca对象 public test() { //为数组字段赋值 IEnum[0] = new Ca { a = "a", b = 30 }; IEnum[1] = new Ca { a = "b", b = 50 }; IEnum[2] = new Ca { a = "c", b = 30 }; IEnum[3] = new Ca { a = "d", b = 45 }; } //用接口实现对对象的遍历 public IEnumerator GetEnumerator() //实现接口 { return this.IEnum.GetEnumerator(); } } public class Ca { public string a { get; set; } public int b { get; set; } }}

如以上代码没有下面这个实现接口的代码,

public IEnumerator GetEnumerator() //实现接口{return this.IEnum.GetEnumerator();} 

则会出现:“_Default.test”不包含“GetEnumerator”的公共定义,因此 foreach 语句不能作用于“_Default.test”类型的变量的错误,使用IEnumerator是实现当一个对象是集合的时候,循环遍历

二、然而到这里而IEnumerable和IEnumerator 的有人又会问区别又是什么呢?

在看IEnumerable这个定义的时候可以看出IEnumerable中包含一个IEnumerator,则总结一下内容:

IEnumerable:继承自IEnumerable,暴露一个IEnumerator,支持在泛型集合中遍历。

直接上代码给来看:

//IEnumerable的使用方法 IEnumerable a { get; set; } protected void Page_Load(object sender, EventArgs e) { List s = new List(); Ca d = new Ca(); d.a = "1"; d.b = 2; s.Add(d); a = s; if (a == null) { Label1.Text = "1"; } else { foreach (Ca c in a) { Label1.Text = Label1.Text + c.a.ToString() + c.b.ToString(); } } } public class Ca { public string a { get; set; } public int b { get; set; } }

从上面的代码可以看出,IEnumerable可以接受一个泛型集合,且由于暴露一个IEnumerator所以该对象也可以被遍历。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3