这主要是学术性质的。只是试图了解为什么这行不通以及如何正确执行。

我在数据库中存储一个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/

10-13 06:23
查看更多