C#基礎---Queue(隊列)的應用


    Queue隊列,特性先進先出. 在一些項目中我們會遇到對一些數據的Check,如果數據不符合條件將會把不通過的信息返回到界面。但是對於有的數據可能會Check很多條件,如果一個數據一旦很多條件不通過,那么全部錯誤返回到界面,可能會讓用戶束手無策。我們有時候往往在一個流程中。只將Check流程中第一個不符合條件的錯誤提示給用戶,讓用戶修改。首先我們就想到了隊列,通過隊列將所有的Check方法注冊,然后依次出列。執行。

      Demo背景:

   XX公司招人,對員工的居住地點,姓氏,年齡都有要求.

   一.首先我們定義實體Model:

    public class Person
    {
        public string Name { get; set; }

        public string Address { get; set; }

        public int Age { get; set; }
    }
    public class ErrorMessage
    {
        public string ErrorCode { get; set; }

        public string ErrorInfo { get; set; }

        public override string ToString()
        {
            return string.Format("{0}:{1}", ErrorCode, ErrorInfo);
        }
    }

       二. 實現方法類:

     Note:Queue<Func<Person,ErrorMessage>> 通過Queue定義了一個fun()委托,然后添加了CheckName和CheckAge方法. 分別將方法注冊到隊列中,然后再出對,執行每一個Check方法,一旦遇到Check不通過,然后就跳出循環.

public class Program
    {
        public static void Main(string[] args)
        {
            Person person = new Person()
            {
                Name = "Frank Zhang",
                Address = "Chengdu",
                Age = 60
            };

            Queue<Func<Person, ErrorMessage>> myQueue = new Queue<Func<Person, ErrorMessage>>();
            ErrorMessage errorMessage = null;
            myQueue.Enqueue(CheckName);
            myQueue.Enqueue(CheckAge);

            var count = myQueue.Count;
            for (int index = 0; index < count; index++)
            {
                var checkMethod = myQueue.Dequeue();
                errorMessage = checkMethod(person);
                if (errorMessage != null)
                {
                    Console.WriteLine(errorMessage.ToString());
                    break;
                }
            }
        }

        public static ErrorMessage CheckName(Person person)
        {
            if (person != null && person.Name.EndsWith("Zhang"))
            {
                return new ErrorMessage() { ErrorCode = "Error_001", ErrorInfo = "我們不招姓張的" };
            }

            return null;
        }

        public static ErrorMessage CheckAge(Person person)
        {
            if (person != null && person.Age > 50)
            {
                return new ErrorMessage() { ErrorCode = "Error_002", ErrorInfo = "我們不招收老年人" };
            }

            return null;
        }
    }

          三. 總結

    上面是在項目中看到的一些運用Check的小技巧。感覺還不錯。分享出來。希望各位博友有啥好的想法可以分享一下。

 

 


           

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM