"重新映射"简单二进制掩码的最佳方法是什么?

Nie*_*els 1 c# binary remap

我有一个非常简单的二元面具.

1 =星期天

2 =星期六

4 =星期五

8 =星期四

16 =周三

32 =星期二

64 =星期一

因此,如果您想要周三,周四和周五的组合,则可获得16 + 8 + 4 = 28

现在我的代码中只有映射的二进制值.将这个值(28)重新映射到星期三,星期四和星期五的最佳方法是什么?

希望得到一些关于如何做到这一点的输入:).

亲切的问候,尼尔斯

Jon*_*eet 7

你应该使用枚举:

[Flags]
public enum WeekDays
{
    Sunday = 1,
    Saturday = 2,
    Friday = 4,
    Thursday = 8,
    Wednesday = 16,
    Tuesday = 32,
    Monday = 64
}
Run Code Online (Sandbox Code Playgroud)

一个简单的显式转换将执行您感兴趣的"重新映射":

WeekDays days = (WeekDays) 28;
Run Code Online (Sandbox Code Playgroud)

您可以轻松使用常规按位操作:

if ((days & WeekDays.Friday) != 0)
{
    // Yes, the mask included Friday
}
Run Code Online (Sandbox Code Playgroud)

你可以在循环中做到这一点:

foreach (WeekDays day in Enum.GetValues(typeof(WeekDays))
{
    if ((days & day) != 0)
    {
        Console.WriteLine("Got {0}", day);
    }
}
Run Code Online (Sandbox Code Playgroud)

即使只是使用Console.WriteLine(days)会给你一个逗号分隔的表示.

您还可以在我的Unconstrained Melody库中找到有用的实用程序方法(特别是Flags代码).

如果您正在寻找其他东西,请更具体.