什么可能导致作业不起作用?

时间:2011-07-26 18:04:18

标签: c# enums variable-assignment

我正在使用C#编写一个项目,出于某种原因,当我尝试为枚举变量赋值时,分配不会发生。我会复制我的代码,但这只是一个简单的任务。它类似于:

testVar = MyEnum.TYPE_OF_ENUM;

其中testVar的类型为MyEnum。当我使用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分配失败。 (state2是一个字段,而不是一个属性)

3 个答案:

答案 0 :(得分:2)

一种可能性是破产者的财产:

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

    void DoSomething()
    {
        Foo = MyEnum.SomethingElse; // does nothing
    }
}

答案 1 :(得分:1)

如果您的枚举具有多个具有相同基础值的值,则可能看起来不会更改:

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

在这里,你只看到One。同样,标志枚举如:

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

您永远不会看到All,只看到One | Two

答案 2 :(得分:0)

MyEnum.TYPE_OF_ENUM是枚举中的第一个值,还是TYPE_OF_ENUM分配给整数值0?

非初始化枚举将设置为0,因此它可能已匹配。

否则,你还有更多的事情发生在你尚未注意到的事情上。