ฉันรู้วิธีใช้ 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;
คำสั่งการใช้ของฉันแล้วเปลี่ยน:
class MyObjects : IEnumerable
ถึง:
class MyObjects : IEnumerable<MyObject>
จากนั้นคลิกขวาIEnumerable<MyObject>
และเลือกImplement Interface => Implement Interface
Visual Studio ช่วยเพิ่มบล็อกโค้ดต่อไปนี้:
IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}
การส่งคืนอ็อบเจ็กต์ IEnumerable ที่ไม่ใช่ทั่วไปจากGetEnumerator();
เมธอดไม่ได้ผลในครั้งนี้ฉันจะใส่อะไรที่นี่? ขณะนี้ CLI ละเว้นการใช้งานที่ไม่ใช่แบบทั่วไปและมุ่งตรงไปที่เวอร์ชันทั่วไปเมื่อพยายามระบุผ่านอาร์เรย์ของฉันในระหว่าง foreach loop
this.GetEnumerator()
และการส่งคืนGetEnumerator()
หรือไม่?