1

私の列挙型:

        [Flags]
        public enum EqualityOperator
        {
            Equal,
            NotEqual,
            LessThan,
            LessThanOrEqual,
            GreaterThan,
            GreaterThanOrEqual,
            Like,
            NotLike,
            In,
            NotIn
        }

それを解析するための私のコード:

var operatorVal = (EqualityOperator)Enum.Parse(typeof (EqualityOperator), filterInfo[3]);

デバッグするとfilterInfo[3]"Like"

ただし、次のようにoperatorVal出てきます"LessThan | GreaterThan"

私は何が欠けていますか?Flags 属性で列挙型を解析できませんか?

4

2 に答える 2

5

値も指定する必要があります。

[Flags]
public enum EqualityOperator {
    Equal = 0,
    NotEqual = 1,
    LessThan = 2,
    LessThanOrEqual = 4,
    GreaterThan = 8,
    GreaterThanOrEqual = 16,
    Like = 32,
    NotLike = 64,
    In = 128,
    NotIn = 256
 }

Likeそのまま解析している理由LessThan | GreaterThanは、定義したとおり、LessThan値が 2 でGreaterThan値が 4 であるためです。これらのビットごとの OR を取ると、LessThan | GreaterThan = 6. しかし、見てください、列挙型を定義したとおりLikeの値があります! 6したがって、「正しく」解析されました。

率直に言って、この列挙型をマークする意味がわかりませんFlags。ポイントはFlags、列挙値に対してビット単位の操作を実行できるようにすることです。この列挙型の値に対してビット演算を行う必要があるのはなぜだと思いますか?

于 2013-07-25T13:22:50.813 に答える
1

あなたの場合: GreaterThan6 LessThanに等しい。2 と GreaterThan4 に等しい。

したがって: GreaterThan = 6 = 110b = 2 + 4 = LessThan + GreaterThan.

于 2013-07-25T13:26:23.920 に答える