Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 我需要将位[]转换为表示位[]中每个位的字符串[]_C#_.net_Bitarray - Fatal编程技术网

C# 我需要将位[]转换为表示位[]中每个位的字符串[]

C# 我需要将位[]转换为表示位[]中每个位的字符串[],c#,.net,bitarray,C#,.net,Bitarray,我正在开发一个自动跟踪系统,该系统采用非常陈旧的技术来注册项目的当前状态。该系统中的GUI交互使用用户可以检查的命名标志来指定项目的当前状态。可以选中11个可能的框,系统接受多个选择 例如,用户可以选择一个标有“确认”和/或“需要跟进”和/或“已安排”和/或“与客户交谈”的复选框。有11种可能的选择 这里是问题所在-编写此文件的人以位和的形式将这些选择保存到数据库中,因此您看到的是复选框选择的原始位[]的int 我需要做的是从数据库中读取整数,并将其转换回11个值为1 | | 0的位数组,然后从

我正在开发一个自动跟踪系统,该系统采用非常陈旧的技术来注册项目的当前状态。该系统中的GUI交互使用用户可以检查的命名标志来指定项目的当前状态。可以选中11个可能的框,系统接受多个选择

例如,用户可以选择一个标有“确认”和/或“需要跟进”和/或“已安排”和/或“与客户交谈”的复选框。有11种可能的选择

这里是问题所在-编写此文件的人以位和的形式将这些选择保存到数据库中,因此您看到的是复选框选择的原始位[]的int

我需要做的是从数据库中读取整数,并将其转换回11个值为1 | | 0的位数组,然后从该位数组中,我需要确定选中了哪些字符串值框,以便确定天气状况,我需要执行自动跟踪

所以基本上如果确认了,我不想跟进 如果需要跟进检查,我需要跟进

这里的问题是可能存在多个选择

因此,在int变成bit[]之后,我们有一个例子

1,0,1,0,0,0,1,1,1,0,1,其中每个int表示选中的框


我需要找到一种方法,将上述内容转换为表示框标签的字符串数组,以确定选中了哪些框。

在C中,通常的方法是使用标志枚举—这正是您的位字段

[Flags]
enum ProjectStatus
{
    Confirmed = 1,
    NeedsFollowUp = 2,
    SpokenWithClient = 4,
    ....
}
要测试是否设置了特定标志,请执行以下操作:

ProjectStatus status = (ProjectStatus)intFromDb;
if( ( status & ProjectStatus.Confirmed ) == ProjectStatus.Confirmed )
    // the Confirmed flag is set
如果您在.NET 4或更高版本中,还有一个Enum.HasFlags扩展方法可以简化此操作

如果您不希望这样做,您可以通过执行以下操作来确定位置x处的位是否已设置:

bool isSet = ( intFromDb & ( 1 << x ) ) != 0;
然后用它来构建字符串


编辑:我还建议你仔细阅读一下位运算符及其作用。这可能是一个好的开始:

更具体地说明数据库中到底存储了什么。提供例子。另外,请举例说明您希望如何阅读这些内容,如何操作这些内容,等等。我认为,在映射这些内容的过程中,您可能能够编写一些代码,这是您在本帖中应该具备的:询问代码的问题必须表明您对正在解决的问题的最低理解。包括尝试过的解决方案、它们不起作用的原因以及预期结果。另请参见:堆栈溢出问题检查表