Tôi biết cách triển khai IEnumerable không chung chung, như thế này:
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();
}
}
}
Tuy nhiên tôi cũng nhận thấy rằng IEnumerable có phiên bản chung IEnumerable<T>
, nhưng tôi không thể tìm ra cách triển khai nó.
Nếu tôi thêm using System.Collections.Generic;
vào chỉ thị của mình bằng cách sử dụng, và sau đó thay đổi:
class MyObjects : IEnumerable
đến:
class MyObjects : IEnumerable<MyObject>
Và sau đó nhấp chuột phải vào IEnumerable<MyObject>
và chọn Implement Interface => Implement Interface
, Visual Studio bổ sung một cách hữu ích khối mã sau đây:
IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}
Trả về đối tượng IEnumerable không chung chung từ GetEnumerator();
phương thức này không hoạt động lần này, vậy tôi phải đặt gì ở đây? CLI bây giờ bỏ qua việc triển khai không chung chung và đi thẳng vào phiên bản chung khi nó cố gắng liệt kê qua mảng của tôi trong vòng lặp foreach.
this.GetEnumerator()
và đơn giản là trả lạiGetEnumerator()
không?