Phương pháp 1: Tiếp tục sử dụng gói gọn và chuyển tiếp cuộc gọi đến triển khai Danh sách.
class SomeObject
{
}
class MyEnum : IEnumerable<SomeObject>
{
private List<SomeObject> _myList = new List<SomeObject>();
public void Add(SomeObject o)
{
_myList.Add(o);
}
public IEnumerator<SomeObject> GetEnumerator()
{
return _myList.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
class Program
{
static void Main(string[] args)
{
MyEnum a = new MyEnum();
a.Add(new SomeObject());
foreach (SomeObject o in a)
{
Console.WriteLine(o.GetType().ToString());
}
Console.ReadLine();
}
}
Cách 2: Kế thừa từ Danh sách thực hiện bạn sẽ có được hành vi đó miễn phí.
class SomeObject
{
}
class MyEnum : List<SomeObject>
{
}
class Program
{
static void Main(string[] args)
{
MyEnum a = new MyEnum();
a.Add(new SomeObject());
foreach (SomeObject o in a)
{
Console.WriteLine(o.GetType().ToString());
}
Console.ReadLine();
}
}
Phương pháp 1 cho phép sandboxing tốt hơn là không có phương pháp sẽ được gọi trong Danh sách mà bạn không biết MyEnum. Ít nhất nỗ lực Phương pháp 2 được ưu tiên.
Nguồn
2008-09-24 09:27:31
Ok, điều này sẽ làm việc nhưng tôi muốn chắc chắn rằng mã gọi là không có khả năng loại đúc điều tra danh sách một lần nữa và thêm hoặc loại bỏ các đối tượng từ nó. – Willem