C#泛型集合—List使用技巧

  • Post author:
  • Post category:其他


泛型集合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("\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>泛型集合,其中的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("\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() { }
    }
        /// <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;
            }

原文链接:

http://www.code-design.cn/article/20120210/csharp-generic-list-object.aspx