我正在C#中进行Gomoku实现,该项目的第一个挑战是智能地表示董事会的状态。在C#中对位字段执行加法操作#
为了实现这个目标,我决定把位字段代表组合的价值:
[Flags]
public enum CombinationValue : byte
{
OnePawn = 1,
TwoPawns = 2,
ThreePawn = 4,
FourPawn = 8,
FivePawns = 16
}
,我无意中发现了这个问题,就是当我想增加一个组合,我想取消设置前一位,并设置一个新的,这基本上是一个二进制左移,这是不允许与枚举。 例如,假设我有两个棋子的组合,并且旁边放置一个棋子,所以枚举的值必须变成“ThreePawn”而不是“TwoPawns”。
所以基本上,我想要做的是TwoPawns + OnePawn == ThreePawns。
什么是最有效的方式来实现这种行为?
您可以将枚举强制转换为整数,然后执行任何您想要的数学运算。 – jdweng
如果'ThreePawn'将是'3'而不是'4',那么它们都不会像你所期望的那样工作吗?另外,如果你想进行位移,则将其转换为基础类型,在本例中为'byte'。 – CodeCaster
so'TwoPawns + ThreePawn = FivePawns'?我不明白你是如何从2 + 6中获得16甚至8的。 – Slai