猿问

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

如果我有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语句中读取值还是在开始时仅读取一次?



月关宝盒
浏览 106回答 1
1回答

鸿蒙传说

我在getter中放置了一个断点,该断点在switch语句开头仅被命中一次。我找不到任何特定的引用,它说switch语句仅读取一次值(如果找到引用,请注释)。但是断点确实证明了这一点。因此,尽管在的情况下需要事先读取值if ... else,在switch语句的情况下,则不需要。
随时随地看视频慕课网APP
我要回答