c# - 使用带有线程安全枚举的 switch case
问题描述
如果我有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;
}
}
}
}
使用switch case时,我可以直接使用这样的属性吗:
private void MyFunc()
{
switch (this.MyEnumVal)
{
case MyEnum.First:
// Do Something
break;
case MyEnum.Second:
// Do Something
break;
}
}
或者我应该先阅读它,然后在读取值上使用开关,如下所示:
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
解决方案
正如@mjwillsswitch
建议的那样,我在 getter 中放置了一个断点,它在语句开头只被击中一次。我找不到任何具体的参考,它说该switch
语句只读取一次值(如果你找到参考,请发表评论)。但是断点确实证明了这一点。
因此,虽然您需要在 的情况下事先读取值,但if ... else
在switch
语句的情况下,您不需要。
推荐阅读
- vue.js - 如何在挂载或创建的钩子中使用另一个计算属性?
- google-apps-script - gmail插件本地化的选项?
- sql-server - 如何在 SELECT 上出现死锁
- linux - 使用 bash 脚本从远程托管的文件中加载环境变量
- activemq - activemq 内存限制配置 Vs maxPageSize
- python - Pygame - 将文本添加到矩形的类实例
- html - 为什么我的字体在表单文本字段中不起作用?
- jsf - 如何在 JSF 中显示 JavaScript JSON 数组?
- javascript - 这是打字稿中的单身人士吗?
- git - 是否可以为不同的站点设置全局 git 配置?