使类与foreach兼容

时间:2016-01-27 15:56:47

标签: c# foreach interface ienumerable ienumerator

我有一个包装对象列表的类。我希望这个类与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();
    }
}

但它说(翻译错误):

  

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

如果我使用:

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

给我同样的错误。

1 个答案:

答案 0 :(得分:6)

这一行错了:

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而不是 <html> <head><title> hello </title></head> <body> <?php $image = 'zz.png'; ?> <img src= "<?php $image ?>" style="width:304px;height:228px;"> hello world.. </body> </html> ,我假设这只是一个简单的拼写错误,否则您也需要解决此问题。