0

私は次のenumように定義しています:

[Flags]
public enum NodeLevel
{
    Root = 1,
    GroupLevel = 2,
    DeptLevel = 4,
    ClassLevel = 8,
    SubclassLevel = 16
}

Flagsそれらに対してビット単位の操作を実行できるように定義しました。ここで、特定のレベルから次のレベルを取得できるように、レベルから「1 を引く」ことができるようにする必要があります。たとえば、オブジェクトに値が含まれており、メソッドNodeLevel.ClassLevelに送信NodeLevel.DeptLevelする必要があるとします。

NodeLevel newLevel = currentLevel - 1;うまくいかないので、これを達成する方法について誰か提案がありますか? とてつもなく単純なことだと思いますが、今のところ私の脳はそれを思いつきません.

.NET 2.0 を使用しています。

4

2 に答える 2

5

右シフト演算子も使用できます。

NodeLevel newLevel = (NodeLevel) ((int)currentLevel >> 1)
于 2012-12-05T22:12:10.567 に答える
5

フラグが 1 つしかないと仮定すると、適切なキャストを使用して 2 で割ることができます。

NodeLevel newLevel = (NodeLevel) ((int)currentLevel / 2);

(興味深いことに、まったくキャストせずに加算と減算を行うことができます...ただし、乗算、除算、シフトなどでは、両方の方法でキャストする必要があります。)

于 2012-12-05T22:09:41.347 に答える