最后一项匹配时的循环列表<string> </string>

时间:2013-08-14 15:25:14

标签: c# asp.net-mvc-4

我有相当简单的List<string>包含阅读类型 - 为了显示目的,我将单独显示这些,而不是使用默认构造函数:

List<string> staticSubjects = new List<string>();

staticSubjects.Add("Comic Books & Graphic Novels");
staticSubjects.Add("Literature");
staticSubjects.Add("Mystery");
staticSubjects.Add("Romance");  
staticSubjects.Add("Science Fiction & Fantasy");
staticSubjects.Add("Suspense & Thriller");
staticSubjects.Add("Westerns");
staticSubjects.Add("Biography & Autobiography");
staticSubjects.Add("Careers");
staticSubjects.Add("Computers & Technology");

此驱动器是每个类型的(8)个标题列表,我们让用户有机会循环浏览所有这些类型以查看所有这些标题。

在表单本身上,当用户点击“Show me more”时,我正在传递我们正在显示标题的当前类型,并转移到下一个:

var currentGenreIdx = genresToLoad.IndexOf(currentGenre);

// get the next genre based on the index
var nextGenre = genresToLoad[currentGenreIdx + 1];

// set the titles accordingly
titleList = allTitles.Where(x => x.genre.ToLower() == nextGenre.ToLower()).ToList();

现在显然这段代码有问题,因为最终索引超出了范围。

我的问题是

假设用户属于我的最后一类“计算机与技术”,我可以使用哪些内容会自动从列表的开头开始,如果我提供最后一项的索引?

4 个答案:

答案 0 :(得分:4)

我认为您正在寻找MOD运算符(C#中的%):

genresToLoad[(currentGenreIdx + 1) % genresToLoad.Count];

答案 1 :(得分:3)

您可以使用

var nextGenre = genresToLoad[(currentGenreIdx + 1) % genreCount];

其中genreCount = genresToLoad.Count

答案 2 :(得分:2)

是的,您可以使用modulo函数,如果第一个参数除以第二个参数,则返回剩余的函数。代码如下:

// get the next genre based on the index
var nextGenre = genresToLoad[(currentGenreIdx + 1) % genresToLoad.Count()]; 

答案 3 :(得分:1)

var nextGenre = genresToLoad[(currentGenreIdx + 1) % genresToLoad.Count];