0

我想要一个范围在 0 到 26 之间的数字(比如说 i),这样当数字为 26 并且它增加 1(比如说 i++)时,值会返回到 0(即该值是循环的)。

c#中有这样的东西吗?这叫什么?如果不是,那么我将如何在代码中实现这一点(接受重载的运算符)。

4

6 回答 6

6

创建一个限制值的属性:

private int _value;

public int Value {
  get { return _value; }
  set { _value = value % 27; }
}

现在,当您增加属性时,setter 将限制该值。

例子:

Value = 25;
Value++; // Value is now 26
Value++; // Value is now 0
Value++; // Value is now 1
于 2013-04-03T14:47:42.510 回答
4

你可以试试这个:

 int result = number % 27;
于 2013-04-03T14:46:00.547 回答
2

使用模数运算符 (%)

var x = 0;
x = (x+1) % 27;

如果你想让它去 0,1,2,3, ..... 24,25, 26 , 0, 1, 2, 3, ...

使用模数 27

于 2013-04-03T14:46:10.563 回答
0

我不知道任何类型的“边界”或规则,您可以按照您想要的方式“设置”一个 int。我建议创建一个或两个 if 语句来控制它。`

if( i <= 26 & i >= 0)
{ ..do something..} 
else i = 0;
于 2013-04-03T14:46:57.277 回答
0

这样的事情应该完成你的要求:

class CircularInt
{
    public int value;

    public static CircularInt operator ++(CircularInt c)
    {
    if (c.value >= 26)
        c.value = 0;
    else
        c.value++;
    return c;
    }
}

然后使用它:

CircularInt cInt = new CircularInt();
cInt++;
Console.WriteLine(cInt.value);
于 2013-04-03T14:53:35.223 回答
0

另一种选择是定义自己的不可变类型。

public struct Value27
{
    private readonly int val;
    private readonly bool isDef;
    private Value27(int value)
    {
       while (value < 0) value += 27;
       val = value % 27;
       isDef = true;
    }
    public static Value27 Make(int value)
    { return new Value27(value); }

    public bool HasValue { get { return isDef; } }
    public int Value { get { return val; } }

    public static Value27 operator +(Value27 curValue)
    { return Make(curValue.Value + 1); }
    public static Value27 operator -(Value27 curValue)
    { return Make(curValue.Value + 26); }

    public static implicit operator Value27(int bValue)
    { return Make(bValue); }
    public static implicit operator int (Value27 value)
    { return value.Value; }
}
于 2013-04-03T15:43:02.313 回答