foreach遍历访问的对象必须实现IEnumerable 或声明GetEnumerator

需要实现一个对象为可遍历的对象,必须实现IEnumerable或声明GetEnumerator 方法,其中,IEnumerable 不是必须实现,但是GetEnumerator 方法则必须声明:

例如,先声明一个Item类,该类用于遍历的实体

//先声明一个Item的对象,用于遍历的实体对象
    public class Item
    {
        public int Id;
        public string Name;
        public int Price;

        public Item(int id, string name, int price)
        {
            Id = id;
            Name = name;
            Price = price;
        }
    }

接下来我们实现 IEnumerable ,同时实现 GetEnumerator 方法,注意这个接口不是一定要实现,但是GetEnumerator 一定要声明。

//接下来的类就是要暴露给外部调用,实现了IEnumerable 的itemList

    public class ItemList : IEnumerable// 这里也可以不实现 IEnumerable,但GetEnumerator必须实现
    {
        private Item[] items;

        public int Count
        {
            get { return items.Length; }//拿到数组中的count
        }

        public ItemList(Item[] _items)
        {
            items = _items;
        }
//必须实现GetEnumerator
        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < items.Length; i++)
            {
                yield return items[i];//通过yield 将通过index找到的item返回到迭代器foreach对象中
            }
        }
    }

在Program.cs 中调用,遍历

ItemList itemList = new ItemList(new Item[] { new Item(1, "apple", 3), new Item(2, "banana", 3) });
foreach (var item in itemList)
{
    Console.WriteLine(item);
}

原文地址:https://www.cnblogs.com/vpersie2008/p/12219188.html

时间: 2024-10-27 16:03:36

foreach遍历访问的对象必须实现IEnumerable 或声明GetEnumerator的相关文章

可以使用foreach遍历循环的条件

大话C#中能使用foreach的集合的实现 转自:http://www.cnblogs.com/tangzhengyue/p/3339936.html 大家都知道foreach的语法: foreach(var item in items) { Console.Writeln(item); } 通过这样一个简单的语句,就能实现遍历集合items中的所有元素. 那么,集合类(注意不是集合中的元素的类)是要满足什么条件才能用foreach遍历呢? 就像买衣服需要去找到卖衣服的人一样,要使用foreac

自定义集合支持使用 foreach循环访问该集合

自定义集合支持使用 foreach循环访问该集合,需要实现 IEnumerable 和 IEnumerator 接口. using System;using System.Collections;public class Person{   public Person(string fName, string lName)   {      this.firstName = fName;      this.lastName = lName;   }   public string firstN

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因在YII框架的使用过程中,我们可以使用foreach直接遍历findAll等方法返回的对象的属性为什么呢?其实这与CModel实现的接口相关,接下来我们看下其实现的整个过程对于一个我们定义的model,它会继承虚类CActiveRecord,CActiveRecord类继承于CModel,如下所示: class special extends CActiveRecord { } abstract class CAct

用&lt;forEach&gt;遍历list集合时,提示我找不到对象的属性

<c:forEach items="${list}" var="item"> <tr> <td>${item.UserId}</td> <td>${item.UserName}</td> </tr> </c:forEach> 用<forEach>遍历list集合时,提示我找不到对象的属性.因为他封装的时候 他会主动将第一位改成大写 如果你的是 name 封装好

访问JSON对象值方法 for in 遍历属性和属性值

<body> <div id="demo"></div> <script> /*方法一:使用点号(.)来访问 JSON 对象的值*/ var myObj, x; //定义变量myObj = { "name":"runoob", "alexa":10000, "site":null };x = myObj.name;document.getElementById

Struts标签&lt;s:iterator&gt;遍历访问复杂Map对象

<s:iterator value="resultType" id="geneUi"> //拿到要遍历的Map对象 <s:iterator value="#geneUi.value" id="typeMap"> //取得Map对象里代表value值的嵌套Map对象 <tr> <s:iterator value="#typeMap.value" id="ty

c#--foreach遍历的用法与split的用法

一. foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成.in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素.该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值.放到只读变量中去,如果括号中的整个表达式返回值为true,foreach块中的语句就能够执行.一旦集合中的元素都已经被访问到,整个表达式的值为false,控制流程就转入到foreach块后面的执行语句. foreach语句经常与数组一起使用,下面实例将通

Foreach遍历

前天在项目中遇到一个问题,foreach遍历过程中修改responses中的对象,其中responses的类型:IEnumerable<Order>,代码如下: foreach (Order item in responses) { if (string.IsNullOrEmpty(item.Creator)) item.Creator = item.Creator2; } 结果可想而知,response的对象并没有被改变.这是为什么? 弄清楚问题之前需要明白什么是foreach.foreac

js中遍历数组、对象的方式

1.标准的for循环遍历数组 var array = [1,2,3,4,5,6,7]; for (var i = 0; i < array.length; i) { console.log(i,array[i]); } 2.for in 遍历对象 for in 以任意顺序遍历一个对象的可枚举属性. 因此当迭代那些访问次序重要的 arrays 时用整数索引去进行 for 循环 (或者使用 Array.prototype.forEach() 或 for...of 循环) . 一般常用来遍历非数组的对