这主要是学术性质的。只是试图了解为什么这行不通以及如何正确执行。
我在数据库中存储一个0 1或2,其中每个代表一个不同的状态标志。 (这不能在生产中更改)
在我的代码中,我有一个枚举
public enum Status{
Active = 0,
Voided = 1<<0,
Refunded = 1<<1
}
我想做的就是用尽可能少的代码将数据库值变成我的枚举。
我相信我可以像这样疯狂地走一下
If(dbValue == 0)
return Status.Active;
else if(dbValue == 1)
return Stats.Voided;
... 等等
但是我很好奇是否有更简单的方法。
基本上,我如何使用尽可能少的代码快速在Int32和移位的枚举之间进行转换。
我尝试这样做
return dbVal | Status.Active;
return 1 << Convert.Int32(dbValue);
和其他一些变化,但看起来不是正常的/
最佳答案
对于您显示的枚举,以下内容将起作用:
int dbValue = ...;
var status = (Status)dbValue;
如果数据库值只能采用以下三个值之一:0(有效),1(无效),2(已退款),那么使您的枚举等于以下值可能会更清楚。
public enum Status
{
Active = 0,
Voided = 1,
Refunded = 2
}
您使用的位偏移建议一个位字段,但这不是您实际要处理的。
Status.Voided | Status.Refunded;
没有任何意义。关于c# - 具有int的BitShift枚举条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21888235/