簡體   English   中英

帶有flags屬性的枚舉

[英]enum with flags attribute

我有枚舉:

    [Flags, Serializable,]
    public enum WeekDays {
        Sunday = 1,
        Monday = 2,
        Tuesday = 4,
        Wednesday = 8,
        Thursday = 16,
        Friday = 32,
        Saturday = 64,
        WeekendDays = Sunday | Saturday,
        WorkDays = Monday | Tuesday | Wednesday | Thursday | Friday,
        EveryDay = WeekendDays | WorkDays
    }

而且,我在一個包含WeekDays枚舉值的類中有屬性WeekDays

public int WeekDays {get; set;}

例如, WorkDays包含62(從星期一到星期五)。
如何檢查當前的WeekDays屬性是否包含當天?

Enum具有方法HasFlag用於確定是否在當前實例中設置了一個或多個位字段。

使用按位運算符&查看某個值是否為集合的一部分:

var today = WeekDays.Thursday;
var workdays = WeekDays.WorkDays;

if((today & workdays) == today) {
    // today is a workday
}

if((today & WeekDays.Friday) == today) {
    // it's friday
}

使用&

    [Flags, Serializable,]
    public enum WeekDays
    {
        Sunday = 1,
        Monday = 2,
        Tuesday = 4,
        Wednesday = 8,
        Thursday = 16,
        Friday = 32,
        Saturday = 64,
        WeekendDays = Sunday | Saturday,
        WorkDays = Monday | Tuesday | Wednesday | Thursday | Friday,
        EveryDay = WeekendDays | WorkDays
    }

    public static WeekDays Days { get; set; }

    private static void Main(string[] args)
    {
        WeekDays today = WeekDays.Sunday;

        Days = WeekDays.WorkDays;

        if ((Days & today) == today)
        {
            Console.WriteLine("Today is included in Days");
        }

        Console.ReadKey();
    }
WeekDays weekDayValue = .... ;
var today = Enum.Parse(typeof(WeekDays),DateTime.Now.DayOfWeek.ToString())
bool matches = ( weekDayValue & today ) == today;

做:

int r = (int)(WeekDays.WorkDays & WeekDays.Sunday)
if (r !=0)
  you have it.

您只需要使用按位布爾邏輯來執行此操作。 如果你要說

WeekDays.Tuesday & WeekDays.WorkDays

那么布爾邏輯將返回4(因為4和62 = 4)。

基本上&表示對於每個位位置,如果兩者都是1,則返回該數字。 所以你只需要檢查它是否> 0。

要以您當前的格式獲取今天,那么您需要做一些數學...

(int)DateTime.Now.DayOfWeek將返回從0(星期日)到6(星期六)的星期幾。

我們需要映射這些以匹配您的范圍。 幸運的是,使用Math.Pow很容易。

int today = Math.Pow(2,(int)DateTime.Now.DayOfWeek);
if (today&WeekDays.WorkDays>0)
    isWorkDay = true;
else
    isWorkDay = false;

獲取所有枚舉名稱和值,然后執行“和”計算以測試WeekDays是否包含當天

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM