0

我在一个类中有一个枚举类型的静态变量。

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 回答