什么是C#中的通用集合?

时间:2008-12-11 23:02:58

标签: c# .net generics

我正在尝试构建我的第一个通用列表并遇到了一些问题。我理解声明看起来像“List<T>”,我的页面顶部有using System.Collections.Generic;。但是,Visual Studio无法识别T变量。

我错过了什么?

8 个答案:

答案 0 :(得分:46)

List<T>表示List<WhateverTypeYouWantItToBeAListOf>。例如:

如果我有一个员工类,我想要一组员工,我可以说:

List<Employee> employeeList = new List<Employee>();

然后,我可以将Employee个对象添加到该列表中,并使其成为类型安全的,并扩展到我放入的许多员工对象。

像这样:

Employee emp1 = new Employee();
Employee emp2 = new Employee();

employeeList.Add(emp1);
employeeList.Add(emp2);

employeeList现在将emp1emp2作为对象。

泛型集合有几个方面,最重要的是它们提供了一种对象独立的方式来拥有......井......对象的集合。它们是类型安全的;这意味着任何集合都将包含一种类型的对象。你不会在Animal内部有一个List<Employee>实例(除非,当然,Employee是Animal继承的基类。但是,那时你有更大的问题。

使用泛型编程是它自己的主题,值得(至少)书中的一章。在非常高的层次上,使用泛型编程提供了另一种重用代码的方法 - 独立于任何类层次结构或特定类的实现细节。

更多信息here

答案 1 :(得分:10)

您需要将T替换为其他类型,例如intstring或您创作的类别:

List<int> values = new List<int>();

values.Add(1);
values.Add(2);

int secondNumber = values[1]; // Yay! No casting or boxing required!

答案 2 :(得分:7)

例如,如果你想要一个通用的整数列表(int),你会写:

List<int> list = new List<int>();

T是一个类型参数,在您的代码中应该是实际类型。

答案 3 :(得分:6)

使“通用列表”通用的原因是,您可以使用同一个类来创建苹果列表和马铃薯列表。当然,一旦使用new运算符创建列表,您必须确定要存储的对象,并通过将您存储的对象的类型名称放在<>中来传达您的决定。

以下行实际告诉编译器:

List<Employee> employeeList = new List<Employee>();

“嘿,我需要一个可以处理Employee类型对象的列表;并且名为employeeList!”

您获得的列表对象不再是通用的。它只接受并返回Employee类型的对象。但是列表的行为是以“通用”的方式定义的,它并不关心它实际使用的对象。它只是在内部称它们为“T”,因为对于列表应该做的所有事情,它的内容类型并不重要。

答案 4 :(得分:5)

T视为变量名称。您必须指定其值,即。使通用类“具体”。因此,您可以创建所需的任何其他内容的List<string>List<int>List

答案 5 :(得分:4)

你声明一个Foo对象列表如下:

List<Foo> fooList;

类型名称是占位符,表示在实例化时放入通用列表的“真实”对象类型。

答案 6 :(得分:4)

执行List<Object>时,请确保您的Object类是公开的。在默认的VS安装中,类是开箱即用的“内部” - 意味着你不能列出它们,因为它们比你声明的公共列表更不易访问。

这让我......昨天。愚蠢的默认值。

答案 7 :(得分:2)

您是尝试使用List类还是尝试构建自己的类?你的代码目前是什么样的?