2011-07-26 47 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 
    } 
}