C# 确定循环集中的一个数字是大于一个还是小于另一个

C# 确定循环集中的一个数字是大于一个还是小于另一个,c#,C#,我为自己不得不问这个而感到懊恼……我可以用几个简单的“如果”语句来解决这个问题,但我相信有一个更简单的方法 我有一个分页控件,允许用户向左或向右移动一页。每一页都有一个索引。页面循环,因此,如果您有三个页面并且一直向右移动,用户会看到: 0 => 1 => 2 => 0 => 1 ... 我有当前页索引和上一页索引。我如何确定用户是向左还是向右翻页 谢谢 一个如果足够: bool movedRight = current > previous; if(prev

我为自己不得不问这个而感到懊恼……我可以用几个简单的“如果”语句来解决这个问题,但我相信有一个更简单的方法

我有一个分页控件,允许用户向左或向右移动一页。每一页都有一个索引。页面循环,因此,如果您有三个页面并且一直向右移动,用户会看到:

0 => 1 => 2 => 0 => 1 ...
我有当前页索引和上一页索引。我如何确定用户是向左还是向右翻页


谢谢

一个
如果
足够:

bool movedRight = current > previous;
if(prev + 1 == current || (current == 0 && prev > 1))
    // right
else
    // left

如果页面循环,第二组条件起作用。

没有足够的信息来回答问题;通常不可能仅凭当前索引和以前的索引就知道用户移动了“右”还是“左”

例如,假设
current=0
,和
previous=1

用户是向左移动还是向右移动,并且由于只有两个页面而溢出到
0
?很难说

如果您不知道页数,以下是一些粗略的解决方案:

// Doesn't handle wrap arounds properly.
bool movedRight = current == previous + 1; 

// Assumes that being at the start point always means an overflow occurred.    
bool movedRight = (current == previous + 1) || current == 0; 

// Assumes that being at the start point always means an overflow occurred,
// except when we were previously at the second element.
bool movedRight = (current == previous + 1)  || (current == 0 && previous != 1); 
如果您知道页数,那么执行以下操作可能更直观:

// Can't disambiguate when numPages == 1 or 2
bool movedRight = current == (previous + 1) % numPages;

但是仍然没有足够的信息告诉用户在只有一两个页面的情况下做了什么:在这些情况下,向左和向右移动会产生相当的“结果”。如果即使在这些情况下,您也必须区分左侧和右侧,那么显而易见的解决方案就是简单地分别存储用户分页的方向。您可能不应该尝试计算无法计算的内容。:)

无法处理当前值为0和前一个值为2的情况。@bleeeah我没有正确阅读问题****拍了拍额头****你说得很好!我一直被逻辑bool-movedRight=current==(先前的+1)%numPages所吸引;但却错过了两页的问题。非常感谢!
// Can't disambiguate when numPages == 1 or 2
bool movedRight = current == (previous + 1) % numPages;