簡體   English   中英

策略模式c#,如何檢查傳遞的枚舉值是否匹配任何可能的參數,因此將評估策略

[英]Strategy pattern c#, how to check if passed enum value match any of possible parameters, so strategy would be evaluated

公共 TeklaViewTypes ViewType => TeklaViewTypes.FrontView | TeklaViewTypes.TopView | TeklaViewTypes.BottomView;

傳遞的 ViewType 應該檢查它是否等於任何 TeklaViewTypes.FrontView | TeklaViewTypes.TopView | TeklaViewTypes.BottomView。

到目前為止,它僅適用於一種可能的選項。

您需要將 TeklaViewTypes 設為二進制 ('flags') 枚舉,然后您只需要使用 & ,如下面的代碼所示。 關鍵是if ((test & ViewType) == test)

    [Flags]
    enum TeklaViewTypes
    {
        FrontView = 1,
        TopView = 2,
        BottomView = 4,
        InvalidView = 8
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            new Program().Run();
        }

        private void Run()
        {
            TeklaViewTypes[] testArray = { 
                TeklaViewTypes.FrontView,   // Pass
                TeklaViewTypes.TopView,     // Pass 
                TeklaViewTypes.BottomView,  // Pass
                TeklaViewTypes.InvalidView, // Fail
            };
            foreach (TeklaViewTypes test in testArray)
                CheckViewType(test);
        }

        private void CheckViewType(TeklaViewTypes test)
        {
            if ((test & ViewType) == test)
                Console.WriteLine($"{test}: Pass");
            else
                Console.WriteLine($"{test}: Fail");
        }

        public TeklaViewTypes ViewType =>
            TeklaViewTypes.FrontView | TeklaViewTypes.TopView | TeklaViewTypes.BottomView;
    }

暫無
暫無

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

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