我有以下内容:
MovingDirection.UP;
我想用!运算符如下:
!MovingDirection.Up; // will give MovingDirection.Down
(这是一个枚举)
我试过了:
public static MovingDirection operator !(MovingDirection f)
{
return MovingDirection.DOWN;
}
...但收到错误:
此一元运算符的参数类型必须是包含类型
有什么想法吗?
答案 0 :(得分:8)
不,您无法在enum
上实施方法或运算符。您可以创建extension method:
public static MovingDirection Reverse(this MovingDirection direction)
{
// implement
}
使用类似:
MovingDirection.Up.Reverse(); // will give MovingDirection.Down
或者您可以使用enum
-like class
代替实际的enum
。
答案 1 :(得分:0)
你可以这样做:
private bool isMovingUp(MovingDirection value)
{
if (value == MovingDirection.UP)
return true;
else
return false;
}
,反之亦然。
或者像古斯沃夫所说的那样使用布尔。
答案 2 :(得分:0)
理论上,这可能是通过扩展方法实现的,但不幸的是,MS决定不实施这个特性:
所以如果你只有up / down,或者某些方法是IsUp(),IsDown(),那么它是boolean。
答案 3 :(得分:0)
您可以对枚举值执行数值或按位运算,因为枚举是整数。
注意:这不一定是个好主意。甚至可能都不好。但是展示了另一种思考枚举的方式。
MovingDirection md = MovingDirection.*; // Some value
md += 1; // If it cannot be cast back to MovingDirection, then it is the default or first value aka 0 (like overflow)
(int)md & 1; // Or do some bitwise operands, like `~` to negate
编辑:显示枚举及其int值
enum MovingDirection { UP = 0, DOWN = 1 }
答案 4 :(得分:0)
不是一个真正的答案,但它确实有效:
enum MovingDirection : byte { Up = 255, Down = 0 };
MovingDirection t1 = MovingDirection.Up;
MovingDirection t2 = (~t1);