Что может привести к тому, что задание не будет работать? - PullRequest
2 голосов
/ 26 июля 2011

Я работаю над проектом на C #, и по какой-то причине, когда я пытаюсь присвоить значение переменной enum, присваивание не происходит. Я бы скопировал свой код, но на самом деле это просто задание. Это что-то вроде:

testVar = MyEnum.TYPE_OF_ENUM;

, где testVar имеет тип MyEnum. Когда я выполняю эту строку с помощью отладчика VisualStudio, я вижу, что значение testVar не меняется. Что может привести к провалу назначения?

EDIT:

Хорошо, я предоставлю больше контекста.

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 ]

2 голосов
/ 26 июля 2011

Одна возможность - свойство со сломанным сеттером:

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

    void DoSomething()
    {
        Foo = MyEnum.SomethingElse; // does nothing
    }
}
1 голос
/ 26 июля 2011

Если ваше перечисление имеет несколько значений с одним и тем же базовым значением, может показаться, что оно не изменяется:

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

Здесь вы бы только увидели One. Точно так же перечисление флага как:

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

Вы бы никогда не увидели All, просто One | Two.

0 голосов
/ 26 июля 2011

Является ли MyEnum.TYPE_OF_ENUM первым значением в перечислении или TYPE_OF_ENUM присвоено целочисленное значение 0?

Неинициализированное перечисление будет установлено на 0, поэтому оно может уже совпадать.

В противном случае, гораздо более вероятно, что у вас происходит что-то еще, что вы еще не заметили.

...