Queue隊(duì)列,特性先進(jìn)先出. 在一些項(xiàng)目中我們會(huì)遇到對(duì)一些數(shù)據(jù)的Check,如果數(shù)據(jù)不符合條件將會(huì)把不通過(guò)的信息返回到界面。但是對(duì)于有的數(shù)據(jù)可能會(huì)Check很多條件,如果一個(gè)數(shù)據(jù)一旦很多條件不通過(guò),那么全部錯(cuò)誤返回到界面,可能會(huì)讓用戶束手無(wú)策。我們有時(shí)候往往在一個(gè)流程中。只將Check流程中第一個(gè)不符合條件的錯(cuò)誤提示給用戶,讓用戶修改。首先我們就想到了隊(duì)列,通過(guò)隊(duì)列將所有的Check方法注冊(cè),然后依次出列。執(zhí)行。
Demo背景:
XX公司招人,對(duì)員工的居住地點(diǎn),姓氏,年齡都有要求.
一.首先我們定義實(shí)體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); } }
二. 實(shí)現(xiàn)方法類(lèi):
Note:Queue<Func<Person,ErrorMessage>> 通過(guò)Queue定義了一個(gè)fun()委托,然后添加了CheckName和CheckAge方法. 分別將方法注冊(cè)到隊(duì)列中,然后再出對(duì),執(zhí)行每一個(gè)Check方法,一旦遇到Check不通過(guò),然后就跳出循環(huán).
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; } }
三. 總結(jié)
上面是在項(xiàng)目中看到的一些運(yùn)用Check的小技巧。感覺(jué)還不錯(cuò)。分享出來(lái)。希望各位博友有啥好的想法可以分享一下。
            
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注