如果我有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;
}
}
如果在this question中使用if ... else
,我需要先读取该值。与switch
声明是否相同? switch
语句的行为是什么?它是在每个case
语句中读取值还是在开头只读取一次?
答案 0 :(得分:0)
正如@mjwills建议的那样,我在getter中放了一个断点,它只在switch
语句的开头被命中一次。我找不到任何具体的参考,它说switch
语句只读取一次值(如果找到参考,请发表评论)。但断点确实证明了这一点。
因此,虽然您需要事先在if ... else
的情况下读取该值,但在switch
语句的情况下,您不需要。