標籤:ring ati oid 方法 c# note rri index 使用者
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; } }
C#基礎---Queue(隊列)的應用