我知道如何實現非通用IEnumerable的,就像這樣:如何實現IEnumerable <T>
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;
我使用的指令,然後更改:
class MyObjects : IEnumerable
到:
class MyObjects : IEnumerable<MyObject>
,然後右鍵單擊IEnumerable<MyObject>
,選擇Implement Interface => Implement Interface
,Visual Studio的有益補充以下塊代碼:
IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}
Returni ng GetEnumerator();
方法中的非通用IEnumerable對象此時不起作用,那麼我在這裏放置了什麼? CLI現在忽略了非泛型實現,並在foreach循環期間嘗試枚舉我的數組時通過泛型版本直接轉向。
謝謝
在非泛型實現中,返回'this.GetEnumerator()'和簡單地返回'GetEnumerator()'有區別嗎? –
@TannerSwett沒有區別。 –