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 =
}; 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 = ; 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 > )
{
return new ErrorMessage() { ErrorCode = "Error_002", ErrorInfo = "我们不招收老年人" };
} return null;
}
}
三. 总结
上面是在项目中看到的一些运用Check的小技巧。感觉还不错。分享出来。希望各位博友有啥好的想法可以分享一下。
C#基础---Queue(队列)的应用的更多相关文章
- python基础 — Queue 队列
queue介绍 queue是python中的标准库,俗称队列. 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换 ...
- queue队列基础讲解
前言 似乎这种对蒟蒻最重要的概念都搜不到,对巨佬来说也根本不必要提及. 导致我也不懂. Queue 意义 queue,队列,一种数据结构. 队列是一种操作受限制的线性表: 特点: 1.元素先进先出. ...
- 第19章 queue队列容器
/* 第19章 queue队列容器 19.1 queue技术原理 19.2 queue应用基础 19.3 本章小结 */ // 第19章 queue队列容器 // 19.1 queue技术原理 // ...
- JDK QUEUE队列
Java Queue基础 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构. offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被 ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- 8.12 day31 进程间通信 Queue队列使用 生产者消费者模型 线程理论 创建及对象属性方法 线程互斥锁 守护线程
进程补充 进程通信 要想实现进程间通信,可以用管道或者队列 队列比管道更好用(队列自带管道和锁) 管道和队列的共同特点:数据只有一份,取完就没了 无法重复获取用一份数据 队列特点:先进先出 堆栈特点: ...
- atitit. java queue 队列体系and自定义基于数据库的队列总结o7t
atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...
- C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。
1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...
- 实现一个线程安全的Queue队列
使用装饰者模式实现一个线程安全的Queue队列. public class SynchronizedQueue<E> implements Queue<E>, Serializ ...
随机推荐
- 2、摘要函数——MD2/MD4/MD5数字签名
摘要是用来防止数据被私自改动的方法,其中用到的函数叫做摘要函数.这些函数的输入可以是任意大小的信息,但是输出是大小固定的摘要.摘要有个重要的特性:如果改变了输入信息的任何内容,即使改变一位,输出也将发 ...
- ubuntu 14.04LTS 环境下配置NFS服务
简言之,NFS(Network FileSystem,网络文件系统)用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS设计之初就是为了在不同的系统间使用,所以它的通讯协议设计与主机及操 ...
- ios 音视频实现边播边缓存的思路和解决方案 (转)
本片为转载内容,主要是以后自己看起来方便一些 原文地址:iOS音视频实现边下载边播放 其实音视频本地缓存的思想都差不多,都需要一个中间对象来连接播放器和服务器. 近段时间制作视频播放社区的功能,期间查 ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因
复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...
- 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)
目录 一.数据加密标准 - Data Encryption Standard(DES) 二.高级加密标准 - Advanced Encryption Standard(AES) 三.消息摘要算法第五版 ...
- 『.NET Core CLI工具文档』(一).NET Core 命令行工具(CLI)
说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Command Line Tools 翻译:.NET Core命令行工具 什么是 .NET Core ...
- [SQL Server] 特殊字符、上标、下标处理
今天遇到一个问题是往 SQL Server 中导入像m².m³这样的单位数据,可是在 SQL Server 中查看到的都是 m2.m3,于是在网上查了一下资料,顺便摘录下来供日后查阅. 一 Wind ...
- 如何在虚拟机里安装Linux
本篇仅为作业... 实验课程:Linux 实验机器:联想y410p 指导老师:刘臣奇 实验时间:2016年9月25日 学生学号:140815 姓名:杨文乾 一.先安装虚拟机,之后创建一个新的虚拟机 之 ...
- jQuery+CSS3文字跑马灯特效
jQuery+CSS3文字跑马灯特效是一款将跑马灯背景制作为3D立方体效果,文字在上面移动时,就像是文字投影到墙壁上,在转角出会改变运动方向. 效果展示 http://hovertree.com/te ...