Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带int的位移位枚举条件_C#_Enums - Fatal编程技术网

C# 带int的位移位枚举条件

C# 带int的位移位枚举条件,c#,enums,C#,Enums,这主要是学术性的。只是试图理解为什么这不起作用,以及如何正确地做到这一点 我在数据库中存储一个0 1或2,其中每个表示不同的状态标志。(这在生产中无法更改) 在我的代码中,我有一个枚举 public enum Status{ Active = 0, Voided = 1<<0, Refunded = 1<<1 } 。。。等等 但我很好奇是否有更简单的方法 基本上,我如何用尽可能少的代码在Int32和位移位枚举之间快速转换 我试过这么做 re

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

我在数据库中存储一个0 1或2,其中每个表示不同的状态标志。(这在生产中无法更改)

在我的代码中,我有一个枚举

public enum Status{
    Active = 0,
    Voided = 1<<0,
    Refunded = 1<<1
}
。。。等等

但我很好奇是否有更简单的方法

基本上,我如何用尽可能少的代码在Int32和位移位枚举之间快速转换

我试过这么做

   return dbVal | Status.Active;
   return 1 << Convert.Int32(dbValue);
返回dbVal | Status.Active;

返回1对于所显示的枚举,以下操作将起作用:

int dbValue = ...;
var status = (Status)dbValue;
如果数据库值只能取三个值中的一个-0(活动)、1(作废)、2(退款)-那么将枚举设置为以下等效值可能会更清楚

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

您使用的位移位表示一个位字段,但这不是您实际要处理的。让
Status.Voided | Status.returned没有意义

对于显示的枚举,以下操作将起作用:

int dbValue = ...;
var status = (Status)dbValue;
如果数据库值只能取三个值中的一个-0(活动)、1(作废)、2(退款)-那么将枚举设置为以下等效值可能会更清楚

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

您使用的位移位表示一个位字段,但这不是您实际要处理的。让
Status.Voided | Status.returned没有意义

因此,如果我想使用位移位枚举,那么数据库中应该存储什么值?AMR我不完全理解这个问题。如果我想使用位移位格式,比如使用100个不同的枚举选项。在数据库中存储该值的正确方法是什么?因为现在我基本上只存储枚举选项I的索引want@AMR我想我一开始不明白改变格式的动机。通常情况下,如果有人决定要紧凑地表示一个小的布尔数组,就需要这样做。例如,考虑代码<代码>枚举类型{None=0,carsis=1,那么作为将来的参考,如果我想使用位移位枚举,数据库中应该存储什么值?@AMR我不完全理解这个问题。如果我想使用位移位格式,比如说使用100个不同的枚举选项。在数据库中存储该值的正确方法是什么?因为现在我基本上是storing枚举选项I的索引want@AMR我想我不理解一开始有点移动格式的动机。通常情况下,如果有人决定要紧凑地代表一小部分布尔值。考虑例如:代码> EnUM CyType {No==0,苛性碱=1。