C#泛型之List操作示例

转载 2015年07月20日 09:52:46
转自: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);
        }
    }

redis的brpop简单使用

redis作为消息队列,已经在许多互联网公司推广开了,相比memcacheq更加丰富的数据结构和功能当然是它备受青睐的主要原因。redis的安装不用赘述,安装完毕后有redis-server和redi...
  • ciaos
  • ciaos
  • 2012年06月15日 22:33
  • 6102

.NET入门(11)集合里的List简单使用

 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Console...
  • java2000_net
  • java2000_net
  • 2009年01月23日 14:46
  • 3549

添加元素到List<T>

在使用List之前,首先需要创建一个List对象,和创建其他类型的对象一样,通过new关键字类创建List对象,但是在创建时要明确指定参数类型T的实际类型,创建之后该对象只能包含指定类型(及其子类型)...
  • liang0000zai
  • liang0000zai
  • 2014年08月23日 16:28
  • 3053

List 中添加多个List集合以及add() 与addAll()的区别

如果有多个已经被实例化的List 集合,想要把他们组合成一个整体,并且,这里必须直接使用List 自身提供的一个方法List.addAll(),否则使用了List.add()方法,则会输出不正常的...
  • c_z_w
  • c_z_w
  • 2016年10月07日 19:08
  • 8765

关于c# 泛型List集合对象的用法及相关操作

今晚终于静下心来下写自己的BLOG关于.net framework 2.0推出“泛型”,学习体会了下当中LIST基本的用法及原理由于之前的版本中,集合CLASS A,CLASS B//实例化A,B类对...
  • mywebstudy
  • mywebstudy
  • 2011年07月16日 17:04
  • 1174

C#中的泛型 / 泛型类 / 数组、ArrayList和List三者的区别

C#中数组、ArrayList和List三者的区别 在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。 数组     数组在C#中最早出现的。在内存中...
  • wolf96
  • wolf96
  • 2015年10月14日 08:00
  • 3688

泛型(一)集合中使用泛型

Why 1.解决元素存储的安全性问题 2.解决获取数据元素时,需要类型强转的问题 泛型的使用 1.在集合中使用泛型 2.自定义泛型类、泛型接口、泛型方法 3.泛型与继承的关系 4.通配符...
  • u010892841
  • u010892841
  • 2016年05月23日 16:24
  • 956

如何在使用了泛型限定的集合中存入其它类型的元素?

如 在ArrayList list = newArrayList(); 中存放一个String类型的对象。 答:这个当然得用反射来做了。  public  class  Text     { ...
  • ganguihong1234
  • ganguihong1234
  • 2014年04月09日 22:12
  • 292

C# List<T>泛型的排序和删除

实际开发中经常需要对List进行排序和去除空值,现在总结2个比较简单的方法实现   1排序:  首先实体类实现IComparable接口,然后重写CompareTo方法 列如: public...
  • icemaker88
  • icemaker88
  • 2014年01月09日 13:29
  • 918

C# 泛型之list<T>与ArrayList<object>比较

类型List中采用泛型T的方式加入内容 而ArrayList中采用object的方式加入内容 using System; using System.Collections.Generic; usi...
  • conquerwave
  • conquerwave
  • 2016年03月01日 20:23
  • 515
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#泛型之List操作示例
举报原因:
原因补充:

(最多只允许输入30个字)