需要帮助完成或重写此算法以导航通用集合

时间:2013-04-19 20:45:19

标签: c# algorithm linq

我正在尝试根据用户是否点击“前进”按钮或“后退”按钮来设置算法代码以设置当前对象。

public Step CurrentStep
{
    get { return _currentStep; }
    set
    {
        if (_currentStep != value)
        {
            _currentStep = value;
            OnPropertyChanged("CurrentStep");
        }
    }
}

private int CurrentStepIndex { get; set; }

private void NextStep()
{
    CurrentStepIndex++;
    GotoStep();
}

private void PreviousStep()
{
    CurrentStepIndex--;
    GotoStep();
}

private void GotoStep()
{
    var query = from step in CurrentPhase.Steps
                where ????
                select step;

    CurrentStep = query.First();
}

CurrentPhase.StepsObservableCollection<Step> Steps {get; set;}。在这个类的构造函数中,我有一种为属性“CurrentStep”设置默认值的方法,因此总会有一个弹出板。

鉴于此集合,我希望使用CurrentStep中存储的CurrentStepIndex对象的索引来查找此项目在集合中的位置,然后通过递减或递增来更改该索引。然后,使用某种linq查询,在新索引处找到“下一步”。

不幸的是,我很难制定我的LINQ查询。更重要的是,我不确定这个算法是否会起作用。

完成LINQ查询需要什么才能使此算法有效?

或者,有没有更好的方法来实现我想要的目标?

2 个答案:

答案 0 :(得分:1)

使用以下内容但请务必控制溢出

  if(CurrentStepIndex>=0 && CurrentStepIndex<CurrentPhase.Steps.Count)
  {
   CurrentStep= CurrentPhase.Steps[CurrentStepIndex)
  }

答案 1 :(得分:1)

这里没有必要使用LINQ。 ObservableCollection<T>继承自Collection<T>,其Items属性(C#中的索引器)。这意味着您可以使用以下代码而不是LINQ:

private void GotoStep()
{
    CurrentStep = CurrentPhase.Steps[CurrentStepIndex];
}