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 ...
随机推荐
- 高性能JavaScript--加载和执行(简要学习笔记一)
1.多数浏览器使用单一进程来处理用户界面刷新和JavaScript脚本的执行.所以同一时刻只能做同一件事.JavaScript执行过程耗时越久,浏览器等待相应的时间就越长. 2.<scrip ...
- Java资源大全中文版(Awesome最新版)
Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...
- Android性能优化之App应用启动分析与优化
前言: 昨晚新版本终于发布了,但是还是记得有测试反馈app启动好长时间也没进入app主页,所以今天准备加个班总结一下App启动那些事! app的启动方式: 1.)冷启动 当启动应用时,后台没 ...
- .net 分布式架构之分布式锁实现
分布式锁 经常用于在解决分布式环境下的业务一致性和协调分布式环境. 实际业务场景中,比如说解决并发一瞬间的重复下单,重复确认收货,重复发现金券等. 使用分布式锁的场景一般不能太多. 开源地址:http ...
- 通过一个实例理解 offsetLeft,offsetTop; offsetWidth , offsetHeight
obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型 obj.offsetLeft 指 obj 相对于版面或由 offsetParen ...
- Oracle数据加载之外部表的介绍
环境: 服务端:RHEL6.4 + Oracle 11.2.0.4 目录: 一. 创建外部表 1.1 创建外部表需要的目录 1.2 创建外部表 1.3 创建外部表源文件 1.4 查询外部表 二. 加载 ...
- 来份ASP.NET Core尝尝
0x01.前言 学习ASP.NET Core也有一段时间了,虽说很多内容知识点还是处于一知半解的状态,但是基本的,还是 略懂一二.如果有错误,还望见谅. 本文还是和之前一样,Demo+在Linux下运 ...
- App内测神器之蒲公英
一.前言部分 没使用蒲公英之前一直采用非常傻B的方式给公司App做内部测试,要么发个测试包让公司测试人员用iTUnes 自己安装 要么苦逼的一个个在我Xcode上直接安装测试包,操作起来又麻烦又苦逼, ...
- vs2013\2015UML系列之-类图
1.UML简介Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是他 ...
- JAVA的序列化和持久化的区别与联系
持久化(Persistence) 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中.XML数据文 ...