使 class foreach 兼容

Making a class foreach-compatible

我有一个包含对象列表的 class。我希望这个 class 与 foreach 循环兼容。

我已经看到几个关于如何在 SO 上执行此操作的问题,但大多数答案都不适合我。

class TrackList
{
    private List<Track> tracks = new List<Track>();
}

您要添加什么才能使其适用于每个人?

到目前为止我有:

class TrackList : IEnumerable<Track>
{
    // ...

    public IEnumerator<Track> GetEnumerator()
    {
        return trackList.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerator.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}

但是它说(翻译错误):

Error 1 'HP.TrackList' does not implement the interface member 'System.Collections.IEnumerable.GetEnumerator()'. 'HP.TrackList.GetEnumerator()' cannot implement 'System.Collections.IEnumerable.GetEnumerator()', because it doesn't have the return type corresponding to 'System.Collections.IEnumerator'. XXX\TrackList.cs 11

如果我改用:

IEnumerator<Track> IEnumerator<Track>.GetEnumerator()
{
    return this.GetEnumerator();
}

给我同样的错误。

这一行是错误的:

System.Collections.IEnumerator System.Collections.IEnumerator.GetEnumerator()

这里有两种类型:

System.Collections.IEnumerator System.Collections.IEnumerator.GetEnumerator()
^----------------------------^ ^----------------------------^
  The type you're returning       The interface you're
                                      implementing

第二个应该是 IEnumerable 而不是 IEnumerator 所以让它成为:

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()

另请注意您的私有字段:

private List<Track> tracks = new List<Track>();

被命名为 tracks 而不是 trackList,我假设这只是一个错字,否则你也需要更正它。