[英]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.