我想要一个数字(比如说i),其范围在0到26之间,这样当数字为26并且增加1(比如说i ++)时,该值将返回0(即该值为圆形)
c#中有这样的东西吗?这叫什么?如果没有,那么我将如何在代码中实现它(接受重载运算符)。
答案 0 :(得分: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
答案 1 :(得分:4)
你可以试试这个:
int result = number % 27;
答案 2 :(得分:2)
使用模数运算符(%)
var x = 0;
x = (x+1) % 27;
如果你想要它去0,1,2,3,..... 24,25, 26 ,0,1,2,3 ......
使用模数27
答案 3 :(得分:0)
我不知道任何类型的“边界”或规则,你可以按照你想要的方式“设置”一个int。我建议创建一个或两个if语句来控制它。 `
if( i <= 26 & i >= 0)
{ ..do something..}
else i = 0;
答案 4 :(得分: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);
答案 5 :(得分: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; }
}