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的小技巧。感觉还不错。分享出来。希望各位博友有啥好的想法可以分享一下。
标签:
C#基础笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?