循环通过int值

时间:2010-10-27 11:34:15

标签: c# javascript

我需要一些意见。

假设你有一个基于int的枚举,值为1到10.如果你有一个变量,比如说,对应于7的值,你怎么能最简单地将它设置为给定范围内的下一个值而不用掉界限?如果值达到限制,则应将其自身重置为范围中的第一个。

我想要一个单线解决方案。我不想做++,然后检查和重置值,而且它必须在C#和JavaScript中都有效。我想Math对象中的某些东西可能会有所帮助,我不知道......

感谢

2 个答案:

答案 0 :(得分:6)

增量,减1,然后模数,然后加1(因为你的枚举是从1开始的。)

((++i - 1) % N + 1

(N = 10,你的Enum可以承受的最大值。)

答案 1 :(得分:1)

如果您知道限制并确保0和该上限之间的所有数字都被枚举占用,则可以使用模运算符

myEnum = (myEnum + 1) % maxValue;

您可能需要进行类型转换:

myEnum = (MyEnumType) (((int) myEnum + 1) % maxValue);

编辑:我注意到你有一个基于枚举的枚举。如果你真的需要这个,那么你必须像莱斯曼在他的回答中所建议的那样做:

// This statement may look weird, but it works :)
myEnum = (myEnum % maxValue) + 1
// Produces (for myEnum with maxValue set to 4, i.e. allows 1,2,3 & 4 as valid values):
//  1 => 2
//  2 => 3
//  3 => 4
//  4 => 1