在C#中以字节形式存储位的更优雅的方法?
我想在C#中的一个字节变量中使用5个布尔值。我已经想出了下面的代码,它工作得很好,但它相当丑陋在C#中以字节形式存储位的更优雅的方法?,c#,bit-manipulation,C#,Bit Manipulation,我想在C#中的一个字节变量中使用5个布尔值。我已经想出了下面的代码,它工作得很好,但它相当丑陋 byte myDataMask = 0; if (isOne) myDataMask |= 1; if (isTwo) myDataMask |= 2; if (isFour) myDataMask |= 4; if (isEight) myDataMask |= 8; if (isSixteen) myDataMask |= 16; 有没有更好、更优雅、更短的方法来表达同样的意思?举个例子怎么样:
byte myDataMask = 0;
if (isOne) myDataMask |= 1;
if (isTwo) myDataMask |= 2;
if (isFour) myDataMask |= 4;
if (isEight) myDataMask |= 8;
if (isSixteen) myDataMask |= 16;
有没有更好、更优雅、更短的方法来表达同样的意思?举个例子怎么样:
public enum Mask
{
IS_NONE = 0,
IS_ONE = 1,
IS_TWO = 2,
IS_FOUR = 4,
IS_EIGHT = 8,
IS_SIXTEEN = 16
}
private static void Main()
{
byte data = 0x04;
switch ((Mask)data)
{
case Mask.IS_NONE :
break;
case Mask.IS_ONE :
break;
case Mask.IS_TWO :
break;
case Mask.IS_FOUR :
break;
case Mask.IS_EIGHT :
break;
case Mask.IS_SIXTEEN :
break;
}
}
还有
位数组
类。如果你不想走位数组
路线,只需将你的代码封装在它自己的类中,并给它一个索引器。MS不建议对位标志使用[Flags]
属性(尽管它不承认做任何事情)?旁注:公共枚举掩码:字节{…}
如果我们希望enum
成为byte
,而不是Int32
MS还建议对enum成员使用PascalCase()。