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)
给我同样的错误.
这条线错了:
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,我假设这是一个简单的拼写错误,否则你也需要解决这个问题.
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |