2010-11-22 3 views
0

내가 인수로 열거를 허용하는 방법이 있습니다C# enum 값을 확인하는 방법은 매개 변수에 전달됩니까?

I 객체가 인수로 방법에 전달되는 열거 형 값 중 하나가 포함되어 있는지 확인하려면
 
[Flags] 
public enum MyEnum 
{ 
    A = 1, 
    B = 2, 
    C = 3 
} 

public class MyClass 
{ 
    public MyEnum myEnum; 
} 

public bool MyMethod(MyClass class, MyEnum enumParam) 
{ 
    // Here I want to check if object class contains some enum values passed as an argument 
    // Something like: if(class.myEnum 'contains-one-of-the-items-of enumParam) 
} 

public void Test() 
{ 
    Myclass class = new MyClass() { myEnum = MyEnum.A }; 
    MyMethod(class, MyEnum.A | MyEnum.B); 
} 

.

답변

1

, 당신은 쓸 수 있습니다 :

이가하는
public bool MyMethod(MyClass class, MyEnum enum) 
{ 
    // Here I want to check if object class contains some enum values passed as an argument 
    // Something like: if(class.myEnum 'contains-one-of-the-items-of enum) 
    return (this.myEnum & enum) != 0; 
} 

비트 플래그의 논리 "AND"및 enum의 플래그 중 하나가 myEnum에 설정된 경우 true을 반환합니다. 당신이 모든 플래그가 설정되어 있는지 확인하려면

, 당신은 쓸 수 있습니다 :

또한

return (this.myEnum & enum) == this.myEnum;

주의 깊게 Bråthen Øyvind @로 응답을 읽습니다. 작업 [Flags] 위해서는, 당신은 당신의 열거 값이 2

2

당신은 내가 enum 키워드와 충돌하지 enumParamenum 변경이

public bool MyMethod(MyClass class, MyEnum enumParam) 
{ 
    if((enumParam & MyEnum.A) != 0){ 
    ... 
    } 
    if((enumParam & MyEnum.B) != 0){ 
    ... 
    } 
} 

처럼 쓸 수 있습니다.

A, B, C의 값이 1,2,3이므로 구현에 문제가 있습니다. 이렇게하면 A + B = 3과 C = 3을 구별 할 수 없습니다. A는 B 2이어야 1이어야하며, C는 (4) (D는 8 일 등한다) 때문에 OP의 주석에

편집

EDIT이어야한다. 당신의 사용 플래그로

public bool MyMethod(MyClass class, MyEnum enumParam) 
{ 
    return Enum.IsDefined(typeof(MyEnum), enumParam); 
} 
+0

죄송하지만 이것은 제가 의미하지 않은 것입니다. enumParam의 값이 class.myEnum에 있는지 확인하고 싶습니다. – Martijn

+0

코드가 컴파일되지 않습니다. 'if ((enumParam & MyEnum.A)! = 0)'을 써야합니다. –

+0

@ 짐 - 물론 그렇습니다. 지금 고쳤습니다. 감사. –

0

4.0 쉽게 Enum.HasFlag 방법을 사용할 수 있습니다. this question에서 C# 3.5 및 이전 버전을 포함한 다른 솔루션을 얻을 수 있습니다. 당신이 매개 변수에 전달 된 값의 어떤 클래스의 myEnum 필드에 있는지 확인하려면

1
의 힘이처럼 열거 변경

이 있는지 확인해야합니다 :

public enum MyEnum 
    { 
     A = 2, 
     B = 4, 
     C = 8 
    } 

및 방법은 간단 같은 :

public bool MyMethod(MyClass aClass, MyEnum aEnum) 
     { 
      return (aClass.myEnum & aEnum) != 0; 
     } 

감사합니다.

+0

그게 그가 생각한 것입니다,하지만 분명히 그것은 아니에요;) –

관련 문제