亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將標準 DayOfWeek 與 Flag 進行比較

如何將標準 DayOfWeek 與 Flag 進行比較

C#
撒科打諢 2023-04-29 09:57:01
我有自己的 DaysOfWeek Flag 枚舉(類似于https://learn.microsoft.com/en-us/previous-versions/ms886541(v=msdn.10))[Flags]public enum DayOfWeek{    Sunday = 0,    Monday = 1,    Tuesday = 2,    Wednesday = 4,    Thursday = 8,    Friday = 16,    Saturday = 32}我需要將標準的 DayOfWeek 與我的進行比較。我怎樣才能做到這一點?
查看完整描述

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 類型。你可以在一周中的任何一天做同樣的事情。

查看完整回答
反對 回復 2023-04-29
?
青春有我

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;


查看完整回答
反對 回復 2023-04-29
?
HUX布斯

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();

    }

}


查看完整回答
反對 回復 2023-04-29
?
森欄

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();

    }

}


查看完整回答
反對 回復 2023-04-29
  • 4 回答
  • 0 關注
  • 170 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號