tôi biết làm thế nào để thực hiện các phi chung IEnumerable, như thế này:Làm thế nào để thực hiện 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();
}
}
}
Tuy nhiên tôi cũng nhận thấy rằng IEnumerable có một phiên bản generic, IEnumerable<T>
, nhưng tôi không thể tìm ra cách để thực hiện nó.
Nếu tôi thêm using System.Collections.Generic;
để chỉ sử dụng của tôi, và sau đó thay đổi:
class MyObjects : IEnumerable
tới:
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 helpfully thêm khối sau của mã:
IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}
Returni ng đối tượng IEnumerable không chung từ phương thức GetEnumerator();
không hoạt động vào lúc này, vì vậy tôi đặt gì ở đây? CLI bây giờ bỏ qua việc thực hiện không chung chung và đi thẳng cho phiên bản chung khi nó cố gắng liệt kê thông qua mảng của tôi trong vòng lặp foreach.
Cảm ơn
Trong việc thực hiện không chung chung, có một sự khác biệt giữa trả về 'this.GetEnumerator()' và chỉ đơn giản là trả về 'GetEnumerator()'? –
@TannerSwett Không có sự khác biệt. –