使 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
,我假设这只是一个错字,否则你也需要更正它。
我有一个包含对象列表的 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
,我假设这只是一个错字,否则你也需要更正它。