4 回答

TA貢獻1803條經驗 獲得超3個贊
由于您的枚舉使用與內置相同的天數順序DayOfWeek,因此您需要做的就是使用DayOfWeektype 的變量作為的指數2,然后將其與您的枚舉變量按位與運算。
像這樣的東西(這將檢查Monday你的枚舉標志1是否存在):
MyDayOfWeek Days = MyDayOfWeek.Monday | MyDayOfWeek.Friday;
DayOfWeek D = DayOfWeek.Monday;
var Mask = 1 << (int)D;
if ((Mask & (int)Days) == Mask)
? //Do whatever;
我已將您的枚舉重命名為MyDaysOfWeek,而DayOfWeek是內置 .NET 類型。你可以在一周中的任何一天做同樣的事情。

TA貢獻1784條經驗 獲得超8個贊
最后,我有解決方案
擁有帶有標志的 DaysOfWeek:
[Flags]
public enum DaysOfWeek
{
? ? None = 0,
? ? Sunday = 1 << 0,
? ? Monday = 1 << 1,
? ? Tuesday = 1 << 2,
? ? Wednesday = 1 << 3,
? ? Thursday = 1 << 4,
? ? Friday = 1 << 5,
? ? Saturday = 1 << 6,
}
由于自己的枚舉具有相同的天數,我們可以編寫擴展方法將標準 DayOfWeek 轉換為自己的
public static class EnumExtensions
{
? ? public static DaysOfWeek ToFlag(this DayOfWeek dayOfWeek)
? ? {
? ? ? ? var mask = 1 << (int)dayOfWeek;
? ? ? ? return (DaysOfWeek)Enum.ToObject(typeof(DaysOfWeek), mask);
? ? }
}
和用法:
? var days = DaysOfWeek.Sunday | DaysOfWeek.Friday;
? var day = DayOfWeek.Sunday;
? var ownDay = day.ToFlag();
? if (days.HasFlag(ownDay))
? ? ? // Do whatever;

TA貢獻1876條經驗 獲得超6個贊
public enum BitwiseDayOfWeek
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
public class Program
{
public static void Main(string[] args)
{
BitwiseDayOfWeek scheduledDayOfWeek
= BitwiseDayOfWeek.Saturday | BitwiseDayOfWeek.Sunday;
// turn System.DayOfWeek (DateTime.Now.DayOfWeek) into BitwiseDayOfWeek
BitwiseDayOfWeek currentDayOfWeek
= (BitwiseDayOfWeek)Math.Pow(2, (double)DateTime.Now.DayOfWeek);
// test if today is the scheduled day
if ( (currentDayOfWeek & scheduledDayOfWeek) == currentDayOfWeek )
Console.WriteLine(currentDayOfWeek);
Console.WriteLine("---------------------");
Console.ReadLine();
}
}

TA貢獻1810條經驗 獲得超5個贊
如果您像這樣更改枚舉:
[Flags]
public enum DayOfWeek
{
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6
}
你可以試試這個:
class Program
{
public static bool Equal(DayOfWeek mine, System.DayOfWeek cSharp)
{
int mineInt = (int)mine;
int cSharpInt = (int)cSharp;
return mineInt == cSharpInt;
}
static void Main(string[] args)
{
DateTime dateTime = DateTime.Now;
DayOfWeek dayOfWeek = DayOfWeek.Sunday;
bool areEqual = Equal(dayOfWeek, dateTime.DayOfWeek);
Console.WriteLine(areEqual);
Console.ReadKey();
}
}
如果你不能改變你的枚舉,你可以試試這個:
class Program
{
public static bool Equal(DayOfWeek mine, System.DayOfWeek cSharp)
{
if (mine == DayOfWeek.Friday && cSharp == System.DayOfWeek.Friday ||
mine == DayOfWeek.Monday && cSharp == System.DayOfWeek.Monday ||
mine == DayOfWeek.Saturday && cSharp == System.DayOfWeek.Saturday ||
mine == DayOfWeek.Sunday && cSharp == System.DayOfWeek.Sunday ||
mine == DayOfWeek.Thursday && cSharp == System.DayOfWeek.Thursday ||
mine == DayOfWeek.Tuesday && cSharp == System.DayOfWeek.Tuesday ||
mine == DayOfWeek.Wednesday && cSharp == System.DayOfWeek.Wednesday)
return true;
return false;
}
static void Main(string[] args)
{
DateTime dateTime = DateTime.Now;
DayOfWeek dayOfWeek = DayOfWeek.Tuesday;
bool areEqual = Equal(dayOfWeek, dateTime.DayOfWeek);
Console.WriteLine(areEqual);
Console.ReadKey();
}
}
- 4 回答
- 0 關注
- 170 瀏覽
添加回答
舉報