使类与foreach兼容

Vir*_*721 0 c# ienumerable ienumerator foreach interface

我有一个包装对象列表的类.我希望这个类与foreach循环兼容.

我已经看到了几个关于如何在SO上做到这一点的问题,但大多数答案都没有为我编译.

class TrackList
{
    private List<Track> tracks = new List<Track>();
}
Run Code Online (Sandbox Code Playgroud)

你会添加什么来使其适用于每个?

到目前为止,我有:

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

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

    System.Collections.IEnumerator System.Collections.IEnumerator.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

但它说(翻译错误):

错误1'HP.TrackList'未实现接口成员'System.Collections.IEnumerable.GetEnumerator()'.'HP.TrackList.GetEnumerator()'无法实现'System.Collections.IEnumerable.GetEnumerator()',因为它没有与'System.Collections.IEnumerator'对应的返回类型.XXX\TrackList.cs 11

如果相反我使用:

IEnumerator<Track> IEnumerator<Track>.GetEnumerator()
{
    return this.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

给我同样的错误.

ang*_*son 6

这条线错了:

System.Collections.IEnumerator System.Collections.IEnumerator.GetEnumerator()
Run Code Online (Sandbox Code Playgroud)

你有两种类型:

System.Collections.IEnumerator System.Collections.IEnumerator.GetEnumerator()
^----------------------------^ ^----------------------------^
  The type you're returning       The interface you're
                                      implementing
Run Code Online (Sandbox Code Playgroud)

第二个应该IEnumerable不是IEnumerator这样:

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
Run Code Online (Sandbox Code Playgroud)

另请注意您的私人领域:

private List<Track> tracks = new List<Track>();
Run Code Online (Sandbox Code Playgroud)

是命名tracks而不是trackList,我假设这是一个简单的拼写错误,否则你也需要解决这个问题.