我希望能够在本月的几天中标记枚举。
当前,我发现了很多关于一年中的月份或星期几的示例,它们基于 enum : short 并使用十六进制格式来指定项目的值。
但是我相信空头在 31 天 + 最后一天的期权中很小。我认为 int 可以,但我一直在研究如何实现这一点并允许发生按位运算。
任何人都可以帮忙吗?
我希望能够在本月的几天中标记枚举。
当前,我发现了很多关于一年中的月份或星期几的示例,它们基于 enum : short 并使用十六进制格式来指定项目的值。
但是我相信空头在 31 天 + 最后一天的期权中很小。我认为 int 可以,但我一直在研究如何实现这一点并允许发生按位运算。
任何人都可以帮忙吗?
我想我已经解决了以下问题:
/// <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
}
您不需要枚举,您可以使用 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);