为了账号安全,请及时绑定邮箱和手机立即绑定

将开关盒与线程安全枚举一起使用

将开关盒与线程安全枚举一起使用

C#
月关宝盒 2021-05-17 12:13:03
如果我有Enum以下内容:private object myEnumValLock = new object();private MyEnum _myEnumVal;public MyEnum MyEnumVal{    get    {        lock(this.myEnumValLock)        {            return this._myEnumVal;        }    }    set    {        lock(this.myEnumValLock)        {            if (value != this._myEnumVal)            {                this.HandleNewMyEnumVal(this._myEnumVal, value);                this._myEnumVal = value;            }        }    }}使用开关盒时,是否可以直接使用以下属性:private void MyFunc(){    switch (this.MyEnumVal)    {        case MyEnum.First:            // Do Something            break;        case MyEnum.Second:            // Do Something            break;    }}还是我应该先读取它,然后在读取值上使用switch,如下所示:private void MyFunc(){    var myEnumVal = this.MyEnumVal;    switch (myEnumVal)    {        case MyEnum.First:            // Do Something            break;        case MyEnum.Second:            // Do Something            break;    }}如果if ... else在此问题中使用as,则需要先读取该值。switch陈述是否相同?该switch语句的行为是什么?它是在每个case语句中读取值还是在开始时仅读取一次?
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我在getter中放置了一个断点,该断点在switch语句开头仅被命中一次。我找不到任何特定的引用,它说switch语句仅读取一次值(如果找到引用,请注释)。但是断点确实证明了这一点。

因此,尽管在的情况下需要事先读取值if ... else,在switch语句的情况下,则不需要。


查看完整回答
反对 回复 2021-05-23
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信