2012-01-01 18 views
1

Enumのif条件があります。私の列挙型は次のとおりです。if条件での使用フラグ

public enum EmploymentType 
{ 
    Type1 = 1, 
    Type2 = 2, 
    Type3 = 3 
} 

と、この条件のためにこの条件

EmploymentType type = EmploymentType.Type1 ; 

if (type.HasFlag(EmploymentType.Type1 | EmploymentType.Type2)) //if (type == (EmploymentType.Type1 | EmploymentType.Type2)) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

期待真の結果が、結果はfalseです。どうして?

+0

なぜ、 '(タイプ== EmploymentType.Type1 ||タイプ== EmploymentType.Type2)であれば' –

+1

[Enum Flags Attribute](http://stackoverflow.com/questions/8447/enum-flags-attribute)を読んでください。 –

答えて

3

あなたはここで間違ってやっているいくつかあります:

  • あなたの列挙が[Flags]属性を持っていないが、 。 HasFlagsは、この属性が設定された列挙型でのみ動作するように設計されています。

  • フラグの規則に従わない。 Type3Type1Type2の組み合わせでない場合は、3ではなく、値が4である必要があります。 FlagsAttribute MSDN pageの文書を読んでください。

  • あなたの期待が間違っている:あなたはビット単位ORフラグ1とフラグ2を-ingと、これらのビットが設定されているかどうかをチェックしているので、HasFlag(Flag1 | Flag2)戻りのみの真の両方フラグ1とフラグ2は、設定されています。詳細はHasFlag documentationをご覧ください。

私はあなたの列挙型がだけ列挙ないフラグのコンテナであることを意味していると思われます。フラグは組み合わせ可能であると想定されます。つまり、タイプは「タイプ1とタイプ2」、「タイプなし」または「すべてのタイプ」(「none」、「bold」、「italic」、太字とイタリック "、"太字と下線 "など)。私はあなたのケースに当てはまるとは思わない。

したがって、フラグのことを忘れて、の代わりに通常の列挙型の一致(例:type == EmploymentType.Type1 || type == EmploymentType.Type2またはswitch)を使用してください。

1

列挙には[Flags]属性がありません。

はまた、おそらく最高の今原因不明の左あなたはそれがないと思う何を意味するものではありません

if (type.HasFlag(EmploymentType.Type1) || type.HasFlag(EmploymentType.Type2)) 
+1

列挙値は2の累乗ではないため、フラグとして扱うことはできません。 – hvd

+2

また、 '[Flags]'に加えて、番号付けは1,2,4,8、... –

+0

私は彼が(if文の)一般的なフラグを使用していると私には奇妙に思えましたが、列挙型の3番目の値は実際には4ではありませんでした... –

0

|にあなたのif文を変更しています。それはあなたがif (a || b)を使用することができ、「またはb場合は、」テストすることは何の問題です:

if (type == EmploymentType.Type1 || type == EmploymentType.Type2) 
{ 
    ... 
} 
1

あなたが列挙型の値は、ベース2でなければなりません[フラグ](バイナリ)を使用

 

    [Flags] 
    enum Days2 
    { 
     None = 0x0, 
     Sunday = 0x1, 
     Monday = 0x2, 
     Tuesday = 0x4, 
     Wednesday = 0x8, 
     Thursday = 0x10, 
     Friday = 0x20, 
     Saturday = 0x40 
    } 

    [Flags] 
    public enum Pet { 
     None = 0, 
     Dog = 1, 
     Cat = 2, 
     Bird = 4, 
     Rabbit = 8, 
     Other = 16 
    } 

+0

DogBirdRabbitを見たいと思っています;) – BlueChippy