没有实现IEnumerable接口怎么也有Getenumerator()?

问题描述

classProgram{publicIEnumeratorGetEnumerator(){yieldreturn"PKU";yieldreturn"SCU";}staticvoidMain(string[]args){Programp=newProgram();foreach(stringiinp){Console.WriteLine(i);}Console.ReadKey();}}如果把GetEnumerator()换个名字,foreach语句那就会说Program不包含getenumerator的公共定义。getenumerator不是实现IEnumerable接口才会有的吗?这个类并没有实现这个接口,怎么也必须有这个方法呢?

解决方案

解决方案二:
foreach必须实现GetEnumerator方法(IEnumerable也就只包含了这个方法约束)
解决方案三:
引用1楼starfd的回复:

foreach必须实现GetEnumerator方法(IEnumerable也就只包含了这个方法约束)

但是我这个类并没有实现IEnumerable接口啊?那么,这个方法名又为什么必须这样写呢?难道Object类实现了IEnumerable接口?
解决方案四:
楼主想法反了,是因为有了GetEnumerator方法,所以才可以foreach遍历,不是因为foreach,所以必须有GetEnumerator方法。
解决方案五:
引用3楼KarasCanvas的回复:

楼主想法反了,是因为有了GetEnumerator方法,所以才可以foreach遍历,不是因为foreach,所以必须有GetEnumerator方法。

是因为foreach时,编译系统会自动去找,看有没有一个叫这个名字的方法吗?

时间: 2024-11-05 12:19:29

没有实现IEnumerable接口怎么也有Getenumerator()?的相关文章

C#中IEnumrator的枚举数和IEnumerable接口

声明IEnumerator的枚举数 要创建非泛型接口的枚举数,必须声明实现IEnumerator接口的类,IEnumerator接口有如下特性: 1.她是System.Collections命名空间的成员 2.它包含3个方法Current.MoveNext和Reset 例如:下面代码实现了一个列出颜色名数组的枚举数类: using System.Collections; class ColorEnumerator:IEnumerator { string [] Colors; int Posit

你可能不知道的陷阱, IEnumerable接口

  1.  IEnumerable 与  IEnumerator          IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的for循环写得心烦,foreach就顺畅了很多.          IEnumerable只有一个抽象方法:GetEnumerator(),而IEnumerator又是一个迭代器接口,真正实现了访问集合的功能.  IEnumerator只有一个Current属性,两个方法Mov

构建可反转排序的泛型字典类(5)--实现IEnumerable接口

5. 实现IEnumerable<KeyValuePair<TKey, TValue>>接口 我们先来看看ReversibleSortedList类的定义: public class ReversibleSortedList<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValu

泛型,IEnumerable接口 ,处理遍历的问题。

问题描述 有这么一个题目,关于树形遍历的问题,我不太理解泛型,IEnumerable<T>,IEnumerable接口在其中的作用,以及能做什么不知道可否讲解一下,这个题的思路,以及大致的解题思路.谢谢了.题目如下:usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;namespaceConsoleApplication2{//说明://以下为一个树的节点的定义,假定:除了需要填写的代码外,其他属性和方法均已实

IQueryable接口与IEnumerable接口比较

         今天写代码的时候调到IQueryable里面看它的方法,发现它是实现IEnumerable接口的,then i'm confused!                       要区分他俩还是先写段代码来看看吧~                  我们拿出以前那个练习EF增删改查的代码改一改:             #region 查询单个实体 using (var dbContext = new SecondChargeEntities())//先创建访问数据库的入口 {

如何用IEnumerable接口去除数组里面的重复项

问题描述 有个数组,我调用了Distinct方法返回序列中非重复的元素,但是没有用,请问下是不是要实现IEnumerable接口才能清除数组里面的重复项?(最好举例说明下如何实现这个接口) 解决方案 解决方案二:该回复于2010-05-14 07:59:53被版主删除解决方案三:友情帮顶下!顺便学习学习!解决方案四:IEnumerable<String>distinctList=numberList.Distinct();

ListBox的Items不支持IEnumerable接口吗?

问题描述 ListBox.ObjectCollection类:publicclassObjectCollection:IList,ICollection,IEnumerable不是写了ObjectCollection实现了IEnumerable接口的吗?那为什么不能用Where方法listBox20.Items.Where(x=>.....)//为什么不能用? 解决方案 解决方案二:你引用linq命名空间了么?where方法是作为扩展方法添加到Enumerable里面的解决方案三:publics

IComparable&lt;&gt;,IFormattable,IEnumerable&lt;&gt;接口使用

1 Racer类 [Serializable] public class Racer : IComparable<Racer>, IFormattable { public Racer(string firstName = null, string lastName = null, string country = null, int starts = 0, int wins = 0, IEnumerable<int> years = null, IEnumerable<st

.net面试题大全(有答案)

1 (1)面向对象的语言具有__继承性_性._封装性_性._多态性 性. (2)能用foreach遍历访问的对象需要实现 _ IEnumerable 接口或声明_ GetEnumerator 方法的类型.1.c#中的三元运算符是__?:__ 2.当整数a赋值给一个object对象时,整数a将会被__装箱___? 3.类成员有__3__种可访问形式? 4.public static const int A=1;这段代码有错误么?是什么? const成员都是static所以应该去掉static 5.