2012-01-01 2 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] 속성이없는 중요한 것은 "A 또는 B 경우", 당신은 if (a || b)를 사용할 수있는 테스트입니다 . HasFlags는이 속성이 설정된 열거 형에서만 작동하도록 설계되었습니다.

  • 당신은 플래그 규칙을 따르지 않습니다. Type3Type1Type2의 조합이 아니면 3 대신 값이 4이어야합니다. FlagsAttribute MSDN page의 설명서를 읽으십시오.

  • 당신의 기대는 잘못된 : 유일하고 진정한 HasFlag(Flag1 | Flag2) 수익률 모두 당신이 또는이 FLAG1 및 Flag2을 -ing 이러한 비트가 설정되어있는 경우 체크 비트이기 때문에 FLAG1과 Flag2이 설정됩니다. 자세한 내용은 HasFlag documentation을 참조하십시오.

나는 당신의 열거가 플래그 단지 열거 아닌 컨테이너 로 의미가 있다고 생각한다. 플래그는 결합 가능해야합니다. 즉, 유형은 "유형 1 및 유형 2"또는 "유형 없음"또는 "모든 유형"(예 : "none", "bold", "italic" 굵게 및 기울임 꼴 ","굵게 및 밑줄 "등). 나는 그것이 귀하의 사건에 해당한다고 생각하지 않습니다.

플래그에 대해서는 잊어 버리고 또는 switch 문과 같은 정규 열거 형 일치를 HasFlags 메서드 대신 사용하십시오. 당신이 사용하는 경우

1

열거 형에 [Flags] 특성이 없습니다.

또한 아마 가장 지금 설명 할 수없는 왼쪽 당신이하지 무슨 생각을 의미하지 않는다

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

열거 형 값은 2의 거듭 제곱이 아니므로 플래그로 처리하면 작동하지 않습니다. – hvd

+2

그리고'[Flags]'외에 번호 매김은 1,2,4,8, ... –

+0

그가 if 문에서 일반적으로 플래그를 사용하고 있다는 이상한 것으로 보였습니다. 열거 형의 세 번째 값은 실제로 4가 아니 었습니다 ... –

0

|에 if 문을 변경하고 있습니다.

당신이 잘못 여기서 뭐하는 몇 가지있다
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