Saya tahu bagaimana menerapkan IEnumerable non generik, seperti ini:
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();
}
}
}
Namun saya juga memperhatikan bahwa IEnumerable memiliki versi generik IEnumerable<T>
, tetapi saya tidak tahu cara menerapkannya.
Jika saya menambahkan using System.Collections.Generic;
ke petunjuk penggunaan saya, dan kemudian mengubah:
class MyObjects : IEnumerable
untuk:
class MyObjects : IEnumerable<MyObject>
Dan kemudian klik kanan IEnumerable<MyObject>
dan pilih Implement Interface => Implement Interface
, Visual Studio dengan membantu menambahkan blok kode berikut:
IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}
Mengembalikan objek IEnumerable non generik dari GetEnumerator();
metode tidak berfungsi kali ini, jadi apa yang harus saya taruh di sini? CLI sekarang mengabaikan implementasi non generik dan langsung menuju ke versi generik ketika mencoba untuk menghitung melalui array saya selama loop foreach.
this.GetEnumerator()
dan hanya kembaliGetEnumerator()
?