重新分配给枚举变量不起作用

Posted

技术标签:

【中文标题】重新分配给枚举变量不起作用【英文标题】:Reassignment to Enum variable not working 【发布时间】:2012-09-02 23:06:58 【问题描述】:

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

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

但是,这是不可行的,因为它在单例类中使用并且需要保持静态(如果有人想告诉我我需要单例,该类旨在处理系统争用整个应用程序中的资源;枚举类型用作资源状态的标志)。

[注意:我提到了this question,但它没有解释为什么不能重新分配变量。]

【问题讨论】:

你的代码是多线程的还是单线程的? 你怎么测试它不起作用? 听起来很奇怪。这两个类是否在不同的程序集(项目)中?您如何检查您的作业是否“有效”? 如果 SomeEnum 在程序集 A 中,OtherClass 在程序集 B 中,请务必在编辑 A 中的枚举后强制重新编译 B。 尝试将您的问题简化为一个小但完整的示例来展示该问题 - 鉴于您提供的代码,我无法重现您的问题。 【参考方案1】:

回答这个问题有点困难,因为您显示的代码并不是您遇到问题的确切代码。我感觉这里少了一些东西。不过,这可能有助于使事情更清楚:

尝试在包含枚举的类中创建方法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; 

【讨论】:

以上是关于重新分配给枚举变量不起作用的主要内容,如果未能解决你的问题,请参考以下文章

类变量分配在 Alamofire 请求块中不起作用

将字符串值分配给来自AsyncTask的onPostExecute方法的活动字符串变量不起作用

Angular 2 将表单分配给变量不起作用#f="form" (submit)="onSubmit(f.value)"

为啥从函数调用分配给属性 innerHTML 不起作用?

为啥将命令输出定向到变量在批处理文件中不起作用

有条件的分配,为啥它不起作用?