C#泛型之List操作示例
阿新 • • 發佈:2019-01-31
轉自:http://blog.itpub.net/12639172/viewspace-478294/
private void button1_Click(object sender, EventArgs e) { label1.Text = ""; /* ArrayList AL = new ArrayList(3); TestData temp = new TestData(1); AL.Add(temp); AL.Add(new TestData(2)); AL.Add(new TestData(3)); foreach (TestData item in AL) { label1.Text += item.Val.ToString() + " "; item.Val += 1; } foreach (TestData item in AL) { label1.Text += item.Val.ToString() + " "; } */ List racers; List racers2; FindRacer finder; //-------------------------------------------------------------------------------- //生成泛型物件 racers = new List(); racers.Add(new Racer("M J", "L")); racers.Add(new Racer("AD3 R", "OK3")); racers.Add(new Racer("M2 O", "L2")); racers.Add(new Racer("AD2 Q", "OK2")); racers.Add(new Racer("M1 W", "L")); racers.Add(new Racer("AD4 A", "OK4")); racers.Add(new Racer("AD1 L", "OK1")); //跌代顯示泛型物件所有元素 label1.Text += "\n跌代顯示泛型物件所有元素\n"; foreach (Racer item in racers) { label1.Text += item.ToString() + " "; } //-------------------------------------------------------------------------------- /* List查詢物件:Preadcate是一個委託,它引用一個謂詞方法. public T Find match); public List FindAll match); */ //委託查詢所有滿足條件的元素 label1.Text += "\nFindAll(Car==\"L\")\n"; finder = new FindRacer("L"); foreach(Racer item in racers.FindAll(new Predicate(finder.DrivingCarPredicate))) { label1.Text += item.ToString() + " "; } label1.Text += "\nFindAll(Car==\"L\")將結果賦給其它泛型物件\n"; racers2 = racers.FindAll(new Predicate(finder.DrivingCarPredicate));//返回泛型物件 foreach (Racer item in racers2) { label1.Text += item.ToString() + " "; } //委託查詢一個元素(找到的第一個元素) label1.Text += "\nFind(Car==\"L\")\n"; finder = new FindRacer("L2"); label1.Text += racers.Find(new Predicate(finder.DrivingCarPredicate)).ToString(); //將查找出的元素做修改 racers.Find(new Predicate(finder.DrivingCarPredicate)).Car = "L"; label1.Text += "\n將查找出元素修改過後\n"; finder = new FindRacer("L"); foreach (Racer item in racers.FindAll(new Predicate(finder.DrivingCarPredicate))) { label1.Text += item.ToString() + " "; } //-------------------------------------------------------------------------------- /* List.ForEach()可以用於對每個元素執行一些操作. 它使用Action委託對集合中的每個元素執行操作.Action委託返回的型別是void. */ racers.ForEach(delegate(Racer r) { r.Car += "_CAR"; }); label1.Text += "\nList.ForEach()全部修改物件\n"; foreach (Racer item in racers) { label1.Text += item.ToString() + " "; } //-------------------------------------------------------------------------------- /* List.Sort對元素進行排序 */ //public void List.Sort(Comparison), 是一個委託方法,該方法帶兩個T型別引數; racers.Sort(delegate(Racer r1, Racer r2) { return r1.Car.CompareTo(r2.Car); }); label1.Text += "\n 排序public void List.Sort(Comparison)\n"; foreach (Racer item in racers) { label1.Text += item.ToString() + " "; } //public void List.Sort(IComparer) racers.Sort(new RacerComparer(RacerComparer.CompareType.Name)); label1.Text += "\n 排序public void List.Sort(IComparer)\n"; foreach (Racer item in racers) { label1.Text += item.ToString() + " "; } //-------------------------------------------------------------------------------- /* 型別轉換 */ List persons = racers.ConvertAll(delegate(Racer r) { int ixSeparator = r.Name.LastIndexOf(' ') + 1; string lastname = r.Name.Substring(ixSeparator, r.Name.Length - ixSeparator); string firstname = r.Name.Substring(0, ixSeparator - 1); return(new Person(firstname, lastname)); }); label1.Text += "\n List.ConvertAll型別轉換\n"; foreach (Person item in persons) { label1.Text += item.ToString() + " "; } label1.Text += "\n 型別轉換後的源資料\n"; foreach (Racer item in racers) { label1.Text += item.ToString() + " "; } //-------------------------------------------------------------------------------- } //-------------------------------------------------------------------------------- //實體類 class Racer { private string name; public string Name { get { return (name); } } private string car; public string Car { get { return (car); } set { car = value; } } public Racer(string name, string car) { this.name = name; this.car = car; } public override string ToString() { return name + "," + car; } } //-------------------------------------------------------------------------------- //查詢類 class FindRacer { private string car; public FindRacer(string car) { this.car = car; } public bool DrivingCarPredicate(Racer racer) { return (racer.Car == car); } } //排序類 class RacerComparer : IComparer { public enum CompareType { Name, Car } private CompareType compareType; public RacerComparer(CompareType compareType) { this.compareType = compareType; } public int Compare(Racer x, Racer y) { int result = 0; switch (compareType) { case CompareType.Name: { result = x.Name.CompareTo(y.Name); break; } case CompareType.Car: { result = x.Car.CompareTo(x.Car); break; } } return (result); } } //-------------------------------------------------------------------------------- //型別轉換類 public class Person { private string firstname; private string lastname; public Person(string firstname, string lastname) { this.firstname = firstname; this.lastname = lastname; } public override string ToString() { return (firstname + "." + lastname); } }