C#索引对象列表

时间:2013-11-17 20:43:31

标签: c# visual-studio-2012 indexing

如何在C#中使用索引以跟踪问题列表?

该列表有五个问题,因此当第一个加载到测验页面上时,用户通过点击按钮提供答案,然后进入答案页面,告诉用户他们是否正确或者错了。在答案页面上,用户将单击“下一个问题”按钮,该按钮应在测验页面上的列表中加载下一个问题。这应该是一些如何保留索引,以便代码知道现在要加载第二个问题。

这会得到完整的问题列表:

public static IEnumerable<QuizGroups> GetGroups(string sectorId)
{                
    var Quizes = _QuizDataSource.AllQuizGroups.Where(x => x.Subtitle == sectorId);
    return Quizes;    
}

如何使用索引迭代问题列表?列表中有5个问题。

3 个答案:

答案 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]