0

我希望能够在本月的几天中标记枚举。

当前,我发现了很多关于一年中的月份或星期几的示例,它们基于 enum : short 并使用十六进制格式来指定项目的值。

但是我相信空头在 31 天 + 最后一天的期权中很小。我认为 int 可以,但我一直在研究如何实现这一点并允许发生按位运算。

任何人都可以帮忙吗?

4

2 回答 2

2

我想我已经解决了以下问题:

/// <summary>
/// Values for days of the month (1, 2, etc., Last Day)  These carry the Flags
/// attribute so DaysOfTheMonth and be combined with | (or).
/// </summary>
[Flags]
public enum DaysOfTheMonth : uint
{
    Day01 = 0x1,
    Day02 = 0x2,
    Day03 = 0x4,
    Day04 = 0x8,
    Day05 = 0x10,
    Day06 = 0x20,
    Day07 = 0x40,
    Day08 = 0x80,
    Day09 = 0x100,
    Day10 = 0x200,
    Day11 = 0x400,
    Day12 = 0x800,
    Day13 = 0x1000,
    Day14 = 0x2000,
    Day15 = 0x4000,
    Day16 = 0x8000,
    Day17 = 0x10000,
    Day18 = 0x20000,
    Day19 = 0x40000,
    Day20 = 0x80000,
    Day21 = 0x100000,
    Day22 = 0x200000,
    Day23 = 0x400000,
    Day24 = 0x800000,
    Day25 = 0x1000000,
    Day26 = 0x2000000,
    Day27 = 0x4000000,
    Day28 = 0x8000000,
    Day29 = 0x10000000,
    Day30 = 0x20000000,
    Day31 = 0x40000000,
    DayLast = 0x80000000
}
于 2013-10-02T00:43:22.387 回答
0

您不需要枚举,您可以使用 4 字节整数来存储该值并与表示为整数的天数进行比较,这可能更方便。

在下面的代码中(使用 C#),第 31 天(最左边的位)、第 3 天和第 1 天被标记为选中。我没有使用可用于特殊标志的最低位。您可以检查下面的代码以查看是否选择了一天:

Int32 selected = Convert.ToInt32("10000000000000000000000000001010", 2);

for (int day = 1; day <= 31; day++)
{
    int dayMask = 1 << day;
    bool isSelected = (selected & dayMask) != 0;
}

要选择日期,您可以使用以下代码:

Int32 toSelect = 0;

// select day 1
toSelect = toSelect | (1 << 1);

// select day 3
toSelect = toSelect | (1 << 3);

// select day 31
toSelect = toSelect | (1 << 31);
于 2013-10-02T00:48:05.257 回答