0

1 つのクラス内に列挙型の静的変数があります。

public enum SomeEnum
{
    UnwantedValue,
    DesiredValue
}

public class SomeClass
{
    public static SomeEnum Variable;
    ...
}

変数を別の場所に再割り当てしたいのですが、何らかの理由で割り当てがその値に影響しません。

public class OtherClass
{
    public OtherClass()
    {
        // SomeClass.Variable defaults to SomeEnum.UnwantedValue

        SomeClass.Variable = SomeEnum.DesiredValue;

        // SomeClass.Variable still equals SomeEnum.UnwantedValue
    }

    public void Foo()
    {
        SomeClass.Variable = SomeEnum.DesiredValue;
        // This does not work either
    }
}

列挙型の値を明示的に割り当てても効果はありません。

public enum SomeEnum
{
    UnwantedValue = 0,
    DesiredValue = 1
}

初期化時に変数に値を割り当てることは、割り当てが機能する唯一の時間ですが、他の場所で値を変更することはできません。

public static SomeEnum Variable = SomeEnum.DesiredValue;

この変数の値を再割り当てできない理由がわかりません。

編集:変数をインスタンス型に変更すると、通常のようにその値を再割り当てできます。

public SomeEnum Variable; // This fixes the problem

ただし、シングルトン クラスで使用されており、静的に保つ必要があるため、これは実行不可能です (誰かがシングルトンの必要性について私に電話をかけたい場合に備えて、クラスはシステム リソースの競合を処理することを意図していますアプリケーション全体; 列挙型は、リソースのステータスのフラグとして使用されます)。

[注:この質問を参照しましたが、変数を再割り当てできない理由が説明されていませんでした。]

4

1 に答える 1

0

あなたが示しているコードはあなたが問題を抱えている正確なコードではないので、これに答えるのは少し難しいです. ここで何かが欠けているような気がします。それでも、これは物事をより明確にするのに役立つかもしれません:

列挙型を含むクラスでメソッドSetSomeEnum()を作成してみGetSomeEnum()て、列挙型自体を非公開にしてください。これは、厳密に言えば、ロジックに違いはありません。ただし、ステップスルーして、どの呼び出しが行われているのかなどをより明確に確認できるため、デバッグが容易になります。

private static SomeEnum _myEnum;

public static void SetSomeEnum(SomeEnum value){
    _myEnum = value;
}

public static SomeEnum SetSomeEnum(SomeEnum value){
    return _myEnum;
}

編集:考え直して、ここではプロパティがおそらく望ましいです:

public SomeEnum MyEnum
{
    get { return _myEnum }
    set { _myEnum = value; }
}
于 2012-09-10T06:14:06.597 に答える