带int的BitShift枚举条件

时间:2014-02-19 17:43:32

标签: c# enums

这主要是学术性质的。只是试图理解为什么这不起作用以及如何正确地做到这一点。

我在我的数据库中存储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);

以及其他一些变化,但nothign似乎工作/

1 个答案:

答案 0 :(得分:4)

对于您显示的枚举,以下内容将起作用:

int dbValue = ...;
var status = (Status)dbValue;

如果数据库值只能取三个值中的一个 - 0(活动),1(无效),2(退款) - 则可能更清楚地使您的枚举具有以下等效值。

public enum Status
{
    Active = 0,
    Voided = 1,
    Refunded = 2
}

你使用的位移建议一个位字段,但这不是你实际处理的。拥有Status.Voided | Status.Refunded;是没有意义的。