将员工可用性表示为按位操作

时间:2018-06-13 22:42:13

标签: c# enums bitwise-operators

我正在为我的员工构建一个计划应用程序,我希望为周一至周六的每周的每一天存储员工的可用性。每位员工都可以选择{Available,Not Available,1stHalf,2ndHalf}来确保每天的可用性。我认为枚举可以存储所有7天,并且按位操作可以用于确定员工当天的可用性类型。这可能吗?

1 个答案:

答案 0 :(得分:1)

是的,你可以做这样的事情

public class Schedule
{
    private int schedule;

    public Schedule(Availability sunday, Availability monday, Availability tuesday, Availability wednesday, Availability thursday, Availability friday, Availability saturday)
    {
        this.schedule = sunday | monday << 2 | tuesday << 4 | wednesday << 6 | thursday << 8 | friday << 10 | saturday << 12;
    }

    public Availability Sunday
    {
        get
        {
            return (this.schedule & 3);
        }
    }

    public Availability Monday
    {
        get
        {
            return (this.schedule >> 2) & 3;
        }
    }

    public Availability Tuesday
    {
        get
        {
            return (this.schedule >> 4) & 3;
        }
    }

    public Availability Wednesday
    {
        get
        {
            return (this.schedule >> 6) & 3;
        }
    }

}

public enum Availability
{
    Available = 0,

    NotAvailable = 1,

    FirstHalf = 2,

    SecondHalf = 3
}

我在星期三停了下来,但希望你能看到使用的模式。您可以使用两位来表示每一天。数字3是二进制的“11”。这被移位到所需日期的正确位置,然后我们使用按位并获取当天的设置位。在我们移动位后,我们抓住了右边。