这主要是学术性质的。只是试图理解为什么这不起作用以及如何正确地做到这一点。
我在我的数据库中存储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似乎工作/
答案 0 :(得分:4)
对于您显示的枚举,以下内容将起作用:
int dbValue = ...;
var status = (Status)dbValue;
如果数据库值只能取三个值中的一个 - 0(活动),1(无效),2(退款) - 则可能更清楚地使您的枚举具有以下等效值。
public enum Status
{
Active = 0,
Voided = 1,
Refunded = 2
}
你使用的位移建议一个位字段,但这不是你实际处理的。拥有Status.Voided | Status.Refunded;
是没有意义的。