如何在C#中使用索引以跟踪问题列表?
该列表有五个问题,因此当第一个加载到测验页面上时,用户通过点击按钮提供答案,然后进入答案页面,告诉用户他们是否正确或者错了。在答案页面上,用户将单击“下一个问题”按钮,该按钮应在测验页面上的列表中加载下一个问题。这应该是一些如何保留索引,以便代码知道现在要加载第二个问题。
这会得到完整的问题列表:
public static IEnumerable<QuizGroups> GetGroups(string sectorId)
{
var Quizes = _QuizDataSource.AllQuizGroups.Where(x => x.Subtitle == sectorId);
return Quizes;
}
如何使用索引迭代问题列表?列表中有5个问题。
答案 0 :(得分:2)
列表中有5个问题。
您不会返回List<QuizGroups>
而是IEnumerable<QuizGroups>
。这可能是一个“非物质化”的查询,而不是一个集合。否则,您可以直接使用它的索引器来访问项目。
如果只返回了5个项目,则可以使用ToList
创建真实列表。如果您只需要5,并且希望确保这一点,则可以在{}之前使用Take(5)
:
public static IList<QuizGroups> GetGroups(string sectorId)
{
var Quizes = _QuizDataSource.AllQuizGroups
.Where(x => x.Subtitle == sectorId)
.OrderBy(x => CreatedAt)
.Take(5)
.ToList();
return Quizes;
}
现在您可以使用索引器或Enumerable.ElementAt
:
IList<QuizGroups> groups = GetGroups(sectorID);
QuizGroups quiz1 = groups[0]; // via indexer
QuizGroups quiz2 = groups.ElementAt(1); // via ElementAt, can throw an exception if there are less than 2
QuizGroups quiz3 = groups.ElementAt(2); // via ElementAtOrDefault, null if there are less than 3
// ...
请注意,您无需先在ToList
中使用GetGroups
来创建集合。您可以直接使用ElementAt
,但随后在访问下一个索引时始终执行查询。
编辑:我假设您需要按DateTime
属性对列表进行排序,以确保订单正确无误。因此,我在OrderBy
中的查询中添加了GetGroups
。
答案 1 :(得分:0)
从测验中获取一个列表
var quizesList = Quizez.ToList();
然后:
for(int index = 0; index < quizesList.Count(); index++)
{
//Access Item at Index with quizesList[index];
}
或者您可以使用ElementAt(int index)
for(int index = 0; index < Quizes.Count(); index++)
{
//Access Item at Index with Quizes.ElementAt(index);
}
答案 2 :(得分:0)
您是否需要索引代码中的任何其他内容。
如果没有,我会使用foreach
foreach(var quizGroup in GetGroups(1))
{
//you now have a reference to each quiz group as you're going through the list
}
或个人访问
var q = GetGroups(1).ToList();
q[0]
q[1]
...
q[q.Count - 1]