zoukankan      html  css  js  c++  java
  • 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的小技巧。感觉还不错。分享出来。希望各位博友有啥好的想法可以分享一下。


               

           

  • 相关阅读:
    【笔记】偏差方差权衡 Bias Variance Trade off
    【笔记】验证数据集与交叉验证
    【笔记】可视化模型误差之学习曲线
    【笔记】过拟合和欠拟合以及为什么要对分为训练数据集和测试数据集
    【笔记】多项式回归的思想以及在sklearn中使用多项式回归和pipeline
    【笔记】特征脸(PCA在人脸识别领域的应用)
    【笔记】使用PCA对数据进行降噪(理解)
    Kubernetes 中的 Pod 安全策略
    解读与部署(三):基于 Kubernetes 的微服务部署即代码
    【从小白到专家】Istio技术实践专题(四):应用接入Istio的正确姿势
  • 原文地址:https://www.cnblogs.com/FourLeafCloverZc/p/4309701.html
Copyright © 2011-2022 走看看