2011-07-26 87 views
2

我正在使用C#編寫項目,出於某種原因,當我嘗試爲枚舉變量賦值時,賦值不會發生。我會複製我的代碼,但它實際上只是一個簡單的任務。它是這樣的:什麼可能會導致作業無法正常工作?

testVar = MyEnum.TYPE_OF_ENUM; 

其中testVarMyEnum類型。當我使用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賦值失敗。 (狀態2是一個字段,而不是一個屬性)

+1

如果你能張貼woudl幫助您的枚舉定義。 –

+0

你可以給這個問題添加更多的上下文嗎?可能是enum的定義和testVar的定義,包括(private,public qualifiers) – Jaime

+2

在分配之後的**和**之前,你看過'testVar'和'MyEnum.TYPE_OF_ENUM'的值嗎?你能提供更多的背景嗎? – Crisfole

回答

0

是MyEnum.TYPE_OF_ENUM枚舉中的第一個值,還是將TYPE_OF_ENUM分配給整數值0?

非初始化枚舉將被設置爲0,因此它可能已經匹配。

否則,你有更多的事情發生,你還沒有注意到。

+0

這是一個很好的想法,雖然在這種情況下情況並非如此。 – Daniel

+0

你說得對,這是我沒有注意到的。事實證明,由於線程問題和以改變state2的方式處理了異常,所以在MyFunc中引發了一個異常。 – Daniel

1

如果您枚舉具有相同的基礎值的多個值,它可能會出現沒有改變:

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

在這裏,你只看到過One。同樣,就像一面旗幟枚舉:

[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 
    } 
}