我知道如何实现非通用IEnumerable,如下所示:
using System;
using System.Collections;
namespace ConsoleApplication33
{
class Program
{
static void Main(string[] args)
{
MyObjects myObjects = new MyObjects();
myObjects[0] = new MyObject() { Foo = "Hello", Bar = 1 };
myObjects[1] = new MyObject() { Foo = "World", Bar = 2 };
foreach (MyObject x in myObjects)
{
Console.WriteLine(x.Foo);
Console.WriteLine(x.Bar);
}
Console.ReadLine();
}
}
class MyObject
{
public string Foo { get; set; }
public int Bar { get; set; }
}
class MyObjects : IEnumerable
{
ArrayList mylist = new ArrayList();
public MyObject this[int index]
{
get { return (MyObject)mylist[index]; }
set { mylist.Insert(index, value); }
}
IEnumerator IEnumerable.GetEnumerator()
{
return mylist.GetEnumerator();
}
}
}
但是,我还注意到IEnumerable具有通用版本IEnumerable<T>
,但我不知道如何实现它。
如果添加using System.Collections.Generic;
到我的using指令,然后更改:
class MyObjects : IEnumerable
至:
class MyObjects : IEnumerable<MyObject>
然后右键单击IEnumerable<MyObject>
并选择Implement Interface => Implement Interface
,Visual Studio会帮助添加以下代码块:
IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}
这次从该GetEnumerator();
方法返回非通用IEnumerable对象不起作用,那么我在这里放什么呢?现在,CLI会忽略非通用实现,并在foreach循环中尝试通过数组枚举时直接进入通用版本。
this.GetEnumerator()
和简单返回之间有区别GetEnumerator()
吗?