C#泛型-使用泛型List
2012-08-17 21:23
288 查看
一、泛型的优点
性能高。从前面的例子可以看出使用不需进行类型转换,可以避免装箱和拆箱操作,提高性能。
类型安全。泛型集合对其存储对象进行了类型约束,不是定义时声明的类型,是无法存储到泛型集合中的,保证了数据类型的安全。
代码重用。使用泛型类型可以最大限度地重用代码,保护类型的安全以及提高性能。
使用泛型
使用泛型可以定义泛型类,泛型接口,泛型方法等。.NET Framework类库在System.Collection.Generic愈命名空间中包含几个新的泛型集合类,List<T>和Dictionary<K,V>是其中非常重要的两种,泛型接口IComparable<T>和IComparer<T>在实际中也有很重要的作用。
泛型集合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);
}
}
}
可以看到,泛型集合大大简化了集合的实现代码,通过它,可以轻松创建指定类型的集合。非但如此,泛型集合还提供了更加强大的功能,下面看看其中的排序及搜索。
性能高。从前面的例子可以看出使用不需进行类型转换,可以避免装箱和拆箱操作,提高性能。
类型安全。泛型集合对其存储对象进行了类型约束,不是定义时声明的类型,是无法存储到泛型集合中的,保证了数据类型的安全。
代码重用。使用泛型类型可以最大限度地重用代码,保护类型的安全以及提高性能。
使用泛型
使用泛型可以定义泛型类,泛型接口,泛型方法等。.NET Framework类库在System.Collection.Generic愈命名空间中包含几个新的泛型集合类,List<T>和Dictionary<K,V>是其中非常重要的两种,泛型接口IComparable<T>和IComparer<T>在实际中也有很重要的作用。
泛型集合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);
}
}
}
可以看到,泛型集合大大简化了集合的实现代码,通过它,可以轻松创建指定类型的集合。非但如此,泛型集合还提供了更加强大的功能,下面看看其中的排序及搜索。
相关文章推荐
- [泛型]使用泛型List
- C# LIST 使用泛型
- 使用XmlSerializer类将对象序列化为Xml格式保存 - 支持泛型的Dictionary,list 等集合类型
- C#使用泛型数组简单实现一个列表List
- c#泛型使用详解:泛型特点、泛型继承、泛型接口、泛型委托
- 泛型List使用示例
- Java基础之泛型——使用泛型链表类型(TryGenericLinkedList)
- DataGridView使用非泛型或者未实现IBindingList接口泛型集合的列排序问题
- java中list,map使用泛型和不使用的区别
- C# 使用List泛型读取和保存文本文件
- List泛型的使用
- C# 使用List泛型读取和保存文本文件
- 使用泛型后的List集合类型的三种遍历方式
- C#泛型技巧:使用 C# 2.0 泛型来完成单例模式的重用
- 【泛型】使用List&lt;T&gt;篇
- C#泛型集合—List<T>使用技巧
- 关于在Webservice里使用LinqToSQL遇到一对多关系的父子表中子表需要ToList输出泛型而产生循环引用错误的解决办法!(转)
- 5-14 EF使用存储过程以及LIST泛型对象转换为Datatable
- Java-List使用泛型出错
- C#中关于在List集合类中使用泛型的例子