我有一个二元面具类:
public class Masque
{
public bool MasquerAdresse { get; set; }
public bool MasquerCpVille { get; set; }
public bool MasquerTelephone { get; set; }
public bool MasquerFax { get; set; }
public bool MasquerEmail { get; set; }
public bool MasquerNom { get; set; }
}
在数据库中我有一个二进制masque字段: 当我有值1 => MasquerAdresse是真的,2 => MasquerCpVille是真的,4 => MasquerTelephone是真的3 => MasquerAdresse和MasquerCpVille是真的等...,这是在c#中解码这个二进制面膜的最佳方法
答案 0 :(得分:4)
正如其他人已在C#中指出的那样,我们通常会使用Flag Enums和Enum.HasFlag()
来执行此操作。正如@Groo在他的评论中添加的那样,这也是更高的内存效率,因为每个bool占用整个字节。使用枚举它看起来像这样:
[Flags]
public enum Masque
{
MasquerAdresse = 1,
MasquerCpVille = 2,
MasquerTelephone = 4,
MasquerFax = 8,
MasquerEmail = 16
MasquerNom = 32
}
var masque = Masque.MasquerAdresse | Masque.MasquerTelephone;
var fromInt = (Masque) 5;
var trueResult = masque.HasFlag(Masque.MasquerTelephone);
如果您决定使用课程,它将如下所示:
public class Masque
{
public bool MasquerAdresse { get; set; }
public bool MasquerCpVille { get; set; }
public bool MasquerTelephone { get; set; }
public bool MasquerFax { get; set; }
public bool MasquerEmail { get; set; }
public bool MasquerNom { get; set; }
public static Masque FromBits(int bits)
{
return new Masque
{
MasquerAdresse = (bits & 1) > 0,
MasquerCpVille = (bits & 2) > 0,
...
};
}
}
使用二进制文件&
,它将应用返回值或0的位掩码。您可以将结果与掩码(bits & 2) == 2
进行比较,或者只检查> 0
。< / p>