我有如下的 PlayList 类。我喜欢歌曲 ID {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 的播放列表实例,我需要执行此操作。
foreach(Song song in favorite.GetSong(4))
{
//Somthing
}
这将返回 ID 为 1、2、3、4 的歌曲。接下来我执行此代码。
foreach(Song song in favorite.GetSong(3))
{
//Somthing
}
我需要返回 id 为 5、6、7 的歌曲。但我不知道该怎么做。我需要记住最后返回的项目,下次从下一个项目开始。如果我执行这个
foreach(Song song in favorite)
{
//Somthing
}
我想将播放列表中的所有歌曲从最后返回的项目(在本例中为 7)返回到结束(8、9、10)。但这不是必需的。
internal class PlayList : IEnumerable<SongID>
{
private List<SongID> songsInAlbum = new List<SongID>();
public Song this[SongID id]
{
get
{
if (songsInAlbum.Contains(id))
{
return AllSongs[id];
}
throw new KeyNotFoundException();
}
}
public IEnumerable<Song> GetSong(int maxReturn = Int32.MaxValue)
{
int wasReturned = 0;
foreach (SongID id in songsInAlbum)
{
if (wasReturned < maxReturn)
{
yield return AllSong[id];
wasReturned++;
}
}
}
public void AddSong(SongID id)
{
songsInAlbum.Add(id);
}
public IEnumerator<SongID> GetEnumerator()
{
return songsInAlbum.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
感谢您的建议!