问题描述
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