• C#:泛型集合—List<T>使用技巧


     (文章转载自:http://blog.csdn.net/a125138/article/details/7742034

    泛型集合List<T>
      泛型最重要的应用就是集合操作,使用泛型集合可以提高代码重用性,类型安全和更佳的性能。
      List<T>的用法和ArrayList相似,List<T>有更好的类型安全性,无须拆,装箱。定义一个List<T>泛型集合的语法如下:
    
    List<T> 集合名=new List<T>();
    
      在泛型定义中,泛型类型参数“<T>”是必须指定的,其中T是定义泛型类时的占位符,其并不是一种类型,仅代表某种可能的类型。在定义时T会被使用的类型代替。泛型集合List<T>中只能有一个参数类型,“<T>”中的T可以对集合中的元素类型进行约束。
    
    注意:泛型集合必须实例化,实例化时和普通类实例化时相同,必须在后面加上“()”。
    
      如定义一个学生类的List<T>,示例如下:
    
    List<Student> students=new List<Student>();
      List<T>添加、删除、检索元素的方法和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("	{0}	{1}	{2}", stu.Name, stu.Number, stu.Score);
       }
       students.Remove(stu1);
       Console.WriteLine("集合中的元素个数为{0}", students.Count);
       Console.ReadLine();
    }
    }
    
      上面代码定义了Student类型的List<T>泛型集合,其中的T被数据类型Student代替,这样定义的集合只能存储Student类型的元素,保证了类型安全,遍历集合元素时,没有经过拆箱操作,提高了性能。
    
    List<T>和ArrayList的区别
    
      List<T>和ArrayList的相同点:添加元素、删除元素、通过索引访问元素方法相同。
      List<T>和ArrayList的不同点:
    ArrayList可以添加任意类型元素;List<T>对添加的元素具有类型约束;
    ArratList添加时装箱,读取时拆箱;List<T>不需要装箱,拆箱操作;
    
    我们再看一个例子:
    
    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("	{0}	{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() { }
        }
            /// <summary>
            /// 取得供应商名称
            /// </summary>
            /// <param name="sql"></param>
            /// <returns></returns>
            public  List<Model.vendor>GetVendList()
            {
                List<Model.vendor> lstV = new List<Model.vendor>();
                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<Model.vendor> lst =new List<Model.vendor>();
                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;
                }
  • 相关阅读:
    java代码水仙花
    java代码求奖金。要求从键盘输入利润
    java中输入3个数,从大到小的输出。。。。
    java代码从键盘输入n的值,计算1+1/2+1/3+...+1/n的值,,
    java求1+1/2+1/3+1/4+......+1/n的值
    求分数1+1/2+1/3+.....+1/n的值
    论程序员成长:如何像游戏一样打怪?新手值得重视!
    网曝某大厂员工下班健身后去领公司夜宵,被罚终身禁止领夜宵并冻结涨薪降考评!
    每个程序员都该学习的5种编程开发语言!最后一门大部分人没听过~
    C语言编程初学者基础知识学习:文件的读写操作!
  • 原文地址:https://www.cnblogs.com/Alvin-x/p/3230428.html
Copyright © 2020-2023  润新知