您当前的位置: 首页 > 

[泛型]使用泛型List

发布时间:2010-11-21 22:53:00 ,浏览量:0

一、泛型的优点

性能高。从前面的例子可以看出使用不需进行类型转换,可以避免装箱和拆箱操作,提高性能。 类型安全。泛型集合对其存储对象进行了类型约束,不是定义时声明的类型,是无法存储到泛型集合中的,保证了数据类型的安全。 代码重用。使用泛型类型可以最大限度地重用代码,保护类型的安全以及提高性能。

使用泛型 使用泛型可以定义泛型类,泛型接口,泛型方法等。.NET Framework类库在System.Collection.Generic愈命名空间中包含几个新的泛型集合类,List和Dictionary是其中非常重要的两种,泛型接口IComparable和IComparer在实际中也有很重要的作用。

泛型集合List 泛型最重要的应用就是集合操作,使用泛型集合可以提高代码重用性,类型安全和更佳的性能。List的用法和ArrayList相似,List有更好的类型安全性,无须拆,装箱。定义一个List泛型集合的语法如下:

List集合名=new List();

在泛型定义中,泛型类型参数“”是必须指定的,其中T是定义泛型类时的占位符,其并不是一种类型,仅代表某种可能的类型。在定义时T会被使用的类型代替。泛型集合List中只能有一个参数类型,“”中的T可以对集合中的元素类型进行约束。 注意:泛型集合必须实例化,实例化时和普通类实例化时相同,必须在后面加上“()”。

如定义一个学生类的List,示例如下: Liststudents=new List();

List添加、删除、检索元素的方法和ArrayList相似,明显的特点是不需要像ArrayList那样装箱和拆箱。

using System; using System.Collections.Generic; using System.Collections; public class Student { public string Name {    get;    set; } public string Number {    get;    set; } public int Score {    get;    set; } } class Program { static void Main() {    List < Student > students = new List < Student > ();    Student stu1 = new Student();    stu1.Name = "陆小凤";    stu1.Number = "0801";    stu1.Score = 20;    Student stu2 = new Student();    stu2.Name = "西门吹雪";    stu2.Number = "0802";    stu2.Score = 23;    students.Add(stu1);    students.Add(stu2);    Console.WriteLine("集合中的元素个数为{0}", students.Count);    foreach (Student stu in students)    {     Console.WriteLine("/t{0}/t{1}/t{2}", stu.Name, stu.Number, stu.Score);    }    students.Remove(stu1);    Console.WriteLine("集合中的元素个数为{0}", students.Count);    Console.ReadLine(); } }

上面代码定义了Student类型的List泛型集合,其中的T被数据类型Student代替,这样定义的集合只能存储Student类型的元素,保证了类型安全,遍历集合元素时,没有经过拆箱操作,提高了性能。

List和ArrayList的区别 List和ArrayList的相同点:添加元素、删除元素、通过索引访问元素方法相同。 List和ArrayList的不同点: ArrayList可以添加任意类型元素;List对添加的元素具有类型约束; ArratList添加时装箱,读取时拆箱;List不需要装箱,拆箱操作;

我们再看一个例子:

using System; using System.Collections; using System.Collections.Generic; class Person { private string _name; //姓名 private int _age; //年龄 //创建Person对象 public Person(string Name, int Age) {    this._name = Name;    this._age = Age; } //姓名 public string Name {    get    {     return _name;    } } //年龄 public int Age {    get    {     return _age;    } } } class Program { static void Main() {    //创建Person对象    Person p1 = new Person("张三", 30);    Person p2 = new Person("李四", 20);    Person p3 = new Person("王五", 50);    //创建类型为Person的对象集合    List < Person > persons = new List < Person > ();    //将Person对象放入集合    persons.Add(p1);    persons.Add(p2);    persons.Add(p3);    //输出第2个人的姓名    Console.WriteLine(persons[1].Name);    foreach (Person p in persons)    {     Console.WriteLine("/t{0}/t{1}", p.Name, p.Age);    } } }

可以看到,泛型集合大大简化了集合的实现代码,通过它,可以轻松创建指定类型的集合。非但如此,泛型集合还提供了更加强大的功能,下面看看其中的排序及搜索。

----以下利用泛型来实现COMBOX控件的数据加载

    public class vendor     {         private string _UserCode;         private string _VendorDes;

        public string VendorDes         {             get { return _VendorDes; }             set { _VendorDes = value; }         }         public string UserCode         {             get { return _UserCode; }             set { _UserCode = value; }         }         public vendor(string display, string value)         {             _VendorDes = display;             _UserCode = value;         }         public vendor() { }     }

        ///         /// 取得供应商名称         ///         ///         ///         public  ListGetVendList()         {             List lstV = new List();             string sql = string.Format("select code,vendordes from vendor");             using (SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.conn, CommandType.Text, sql))             {                                while (dr.Read())                 {                         lstV.Add(new Model.vendor(dr["code"].ToString().Trim (), dr["vendordes"].ToString().Trim ()));                                    }                            }             return lstV;                   }

            //测试COMBOX             BLL.PO vd = new BLL.PO();             List lst =new List();             lst =vd.GetVendList();

            foreach (Model.vendor v in lst)             {                 string code = v.UserCode;                 string vendor = v.VendorDes;                           comboBox1.Items.Add(vendor);                 comboBox1.DisplayMember = code;                 comboBox1.ValueMember = vendor;             }

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    106485博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.4370s