我正在使用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是一个字段,而不是一个属性)
答案 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,因此它可能已匹配。
否则,你还有更多的事情发生在你尚未注意到的事情上。