博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#泛型-使用泛型List<T>
阅读量:5037 次
发布时间:2019-06-12

本文共 2693 字,大约阅读时间需要 8 分钟。

一、泛型的优点

性能高。从前面的例子可以看出使用不需进行类型转换,可以避免装箱和拆箱操作,提高性能。

类型安全。泛型集合对其存储对象进行了类型约束,不是定义时声明的类型,是无法存储到泛型集合中的,保证了数据类型的安全。
代码重用。使用泛型类型可以最大限度地重用代码,保护类型的安全以及提高性能。

使用泛型

使用泛型可以定义泛型类,泛型接口,泛型方法等。.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);
   }
}
}

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

转载于:https://www.cnblogs.com/tanding/archive/2012/06/29/2569380.html

你可能感兴趣的文章
JavaScript特效源码(3、菜单特效)
查看>>
聊聊、Zookeeper Linux 单服务
查看>>
Linux常用命令总结
查看>>
KRPano动态热点专用素材图50多个,加动态热点使用方法
查看>>
yii模型ar中备忘
查看>>
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>
12th week blog
查看>>
dijkstra (模板)
查看>>
python小记(3)
查看>>
编译Linux驱动程序 遇到的问题
查看>>
大型分布式网站架构技术总结
查看>>
HDU 1017[A Mathematical Curiosity]暴力,格式
查看>>
[算法之美] KMP算法的直观理解
查看>>