什么时候应该使用IEnumerable和GetEnumerator?

bob*_*bbo 5 .net c#

在我们的许多项目中,我看到了一些自定义集合或容器类,它们包含某种泛型集合,例如List(of T)类.

它们通常有一个GetXXX方法,它返回自定义集合类使用的任何类型的IEnumerable,因此可以使用foreach循环迭代内部集合.

例如

public IEnumerable<UploadState> GetStates
{
    get
    {
        return new List<UploadState>(m_states);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这些类应该实现IEnumerable接口,并调用GetEnumeratorList本身.

是否有首选方式,还是由开发人员负责?

Bal*_*nyi 2

如果您的类是自定义集合类,那么是的,它应该实现IEnumerable<T>. 在这种情况下,内部列表的公共属性将是多余的。想象一个简单的类:

public class People : IEnumerable<Person>
{
    List<Person> persons = new List<Person>();

    public IEnumerator<Person> GetEnumerator()
    {
        return persons.GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您的类不能像集合一样运行,则IEnumerable为其元素提供公共属性:

public class Flight
{
    List<Person> passengers = new List<Person>();

    public IEnumerable<Person> Passengers
    {
        get { return passengers; }
    }
}
Run Code Online (Sandbox Code Playgroud)

无论如何,选择正确的设计始终取决于开发人员。