当前位置: 代码迷 >> C# >> C#基础-Queue(行列)的应用
  详细解决方案

C#基础-Queue(行列)的应用

热度:515   发布时间:2016-05-05 04:47:15.0
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的小技巧。感觉还不错。分享出来。希望各位博友有啥好的想法可以分享一下。

 

 


           

       

2楼L.L.L
实际来说没任何必要,有些地方用队列栈这些会简化问题。这个完全可以用if else嵌套或者 return、break之类的实现一次报一个错
Re: 我有一颗四叶草
@L.L.L,恩,用上quene只是感觉代码简洁. 清晰易懂.
1楼『大雪无痕』
推荐一下。
Re: 我有一颗四叶草
@『大雪无痕』,谢谢,看了你的『.Net』微软家的女儿们 觉得挺有意思的,只可惜从接触开始我就从vs2010和.net3.5开始走了。有时候挺崇拜你们包括公司里面搞了7,8年.NET,感觉你们才是真正见证了.net的成长.