2011-07-26 2 views
2

C# 프로젝트에서 작업하고 있는데 어떤 이유로 enum 변수에 값을 할당하려고해도 할당이 수행되지 않습니다. 내 코드를 복사 하겠지만 실제로는 간단한 할당입니다. 이 같은 뭔가 : testVar 유형 MyEnum이다할당이 작동하지 않는 원인은 무엇입니까?

testVar = MyEnum.TYPE_OF_ENUM; 

. VisualStudio 디버거를 사용하여이 줄을 단계별로 살펴보면 testVar 값이 변경되지 않음을 알 수 있습니다. 아마도 과제를 실패하게 만들 수있는 것은 무엇일까요?

편집 :

확인을 좀 더 컨텍스트를 제공 할 것입니다.

public enum MyEnum1 
{ 
    ONE, 
    TWO, 
    THREE, 
    FOUR, 
    FIVE, 
    SIX, 
    SEVEN, 
    EIGHT 
} 

public enum MyEnum2 
{ 
    A, 
    B, 
    C, 
    D, 
    E, 
    F 
} 

public void StateMachine(MyEnum1 state1) 
{ 
    if(state2 == MyEnum2.A) 
    { 
     switch (state1) 
     { 
      case MyEnum1.ONE: 
       state2 = MyEnum2.B; 
       MyFunc(MyEnum2.B); 
       break; 
      default: 
       break; 
     } 
    } 
    else if (state2 == MyEnum2.B) 
    { 
     switch(state1) 
     { 
      case MyEnum1.ONE: 
       state2 = MyEnum2.B; 
       MyFunc(MyEnum2.B); 
       break; 
      case MyEnum1.THREE: 
       state2 = MyEnum2.C; 
       MyFunc(MyEnum2.C); 
       break; 
      default: 
       break;     
     } 
    } 
    // Etcetera 
} 

할당이 state2 = whatever 일 때 발생합니다.

다음
public enum MyEnum { 
    One = 1, 
    Two = 1, 
} 

, 당신은 오직 One를 볼 것 :

+1

도움이 woudl 당신의 열거 정의를 게시 할 수 있다면. –

+0

질문에 조금 더 많은 컨텍스트를 추가 할 수 있습니까? 어쩌면 열거 형의 정의와 testVar의 정의 (private, public 한정자)를 포함하여 – Jaime

+2

할당 후에 ** 및 ** 앞에 'testVar'와'MyEnum.TYPE_OF_ENUM' 값을 모두 보았습니까? 컨텍스트를 좀 더 줄 수 있습니까? – Crisfole

답변

0

MyEnum.TYPE_OF_ENUM이 (가) 열거 형의 첫 번째 값입니까, 아니면 TYPE_OF_ENUM이 정수 값 0입니까?

초기화되지 않은 열거 형은 0으로 설정되어 이미 일치 할 수 있습니다.

그렇지 않으면 아직 눈치 채지 못한 다른 일이있을 가능성이 훨씬 큽니다.

+0

좋은 생각인데,이 상황에서는 그렇지 않습니다. – Daniel

+0

당신이 옳았는데, 그것은 제가 눈치 채지 못한 것이 었습니다. 예외가 스레딩 문제로 인해 MyFunc에 깊이 던져지고 state2를 변경하는 방식으로 처리된다는 것을 알았습니다. – Daniel

1

당신의 열거가 동일한 기본 값으로 여러 값이있는 경우, 변경되지 나타날 수 있습니다 (상태 2는 필드가 아닌 속성입니다). 마찬가지로, 같은 플래그 열거 형 :

[Flags] 
public enum MyEnum { 
    One = 1, 
    Two = 2, 
    All = One | Two, 
} 

당신은 All, 단지 One | Two을 볼 수 없을 것입니다.

1

하나의 가능성은 깨진 세터와 속성입니다 :

class C 
{ 
    private MyEnum foo = MyEnum.Something; 
    public MyEnum Foo 
    { 
     get { return foo; } 
     set { } 
    } 

    void DoSomething() 
    { 
     Foo = MyEnum.SomethingElse; // does nothing 
    } 
} 
관련 문제