C#基础---Queue(队列)的应用
Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面。但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不通过,那么全部错误返回到界面,可能会让用户束手无策。我们有时候往往在一个流程中。只将Check流程中第一个不符合条件的错误提示给用户,让用户修改。首先我们就想到了队列,通过队列将所有的Check方法注册,然后依次出列。执行。
Demo背景:
XX公司招人,对员工的居住地点,姓氏,年龄都有要求.
一.首先我们定义实体Model:
publicclassPerson
{publicstringName {get;set; }publicstringAddress {get;set; }publicintAge {get;set; }
}
publicclassErrorMessage
{publicstringErrorCode {get;set; }publicstringErrorInfo {get;set; }publicoverridestringToString()
{returnstring.Format("{0}:{1}", ErrorCode, ErrorInfo);
}
}
二. 实现方法类:
Note:Queue<Func<Person,ErrorMessage>> 通过Queue定义了一个fun()委托,然后添加了CheckName和CheckAge方法. 分别将方法注册到队列中,然后再出对,执行每一个Check方法,一旦遇到Check不通过,然后就跳出循环.
publicclassPRogram
{publicstaticvoidMain(string[] args)
{
Person person=newPerson()
{
Name="Frank Zhang",
Address="Chengdu",
Age=60};
Queue<Func<Person, ErrorMessage>> myQueue =newQueue<Func<Person, ErrorMessage>>();
ErrorMessage errorMessage=null;
myQueue.Enqueue(CheckName);
myQueue.Enqueue(CheckAge);varcount =myQueue.Count;for(intindex =0; index < count; index++)
{varcheckMethod =myQueue.Dequeue();
errorMessage=checkMethod(person);if(errorMessage !=null)
{
Console.WriteLine(errorMessage.ToString());
break;
}
}
}publicstaticErrorMessage CheckName(Person person)
{if(person !=null&& person.Name.EndsWith("Zhang"))
{returnnewErrorMessage() { ErrorCode ="Error_001", ErrorInfo ="我们不招姓张的"};
}returnnull;
}publicstaticErrorMessage CheckAge(Person person)
{if(person !=null&& person.Age >50)
{returnnewErrorMessage() { ErrorCode ="Error_002", ErrorInfo ="我们不招收老年人"};
}returnnull;
}
}
三. 总结
上面是在项目中看到的一些运用Check的小技巧。感觉还不错。分享出来。希望各位博友有啥好的想法可以分享一下。