什么是C#中的通用集合?
我正在尝试构建我的第一个通用列表并遇到了一些问题。 我理解声明看起来像“ List
”,我using System.Collections.Generic;
在我的页面顶部。 但是,Visual Studio无法识别T
变量。
我错过了什么?
List
表示List
。 例如:
如果我有一个员工类,我想要一个员工集合,我可以说:
List employeeList = new List ();
然后,我可以将Employee
Objects添加到该列表中,并将其设置为Type-safe并扩展到我放入的许多员工对象。
像这样:
Employee emp1 = new Employee(); Employee emp2 = new Employee(); employeeList.Add(emp1); employeeList.Add(emp2);
employeeList
现在将emp1
和emp2
作为对象。
generics集合有几个方面,最重要的是它们提供了一种对象独立的方式来拥有……井……对象的集合。 它们是类型安全的; 这意味着任何集合都将包含一种类型的对象。 你不会在List
有一个Animal
实例(当然,除非Employee是Animal
inheritance的基类。但是,那时你有更大的问题。
使用generics编程是它自己的主题,值得(至少)书中的一章。 在非常高的层次上,使用generics编程提供了另一种重用代码的方法 – 独立于任何类层次结构或特定类的实现细节。
更多信息在这里 。
您需要将T
替换为另一个类型,例如int
, string
或您创建的类:
List values = new List (); values.Add(1); values.Add(2); int secondNumber = values[1]; // Yay! No casting or boxing required!
例如,如果你想要一个通用的整数列表( int
),你会写:
List list = new List ();
T
是一个类型参数,在您的代码中应该是实际类型。
什么使“通用列表”通用,事实是,您可以使用相同的类来创建苹果列表和土豆列表。 当然,一旦使用new
运算符创建列表,您必须确定要存储的对象,并通过将存储的对象的Type名称放在<>
来表达您的决定。
以下行实际上告诉编译器:
List employeeList = new List ();
“嘿,我需要一个可以处理Employee
类型对象的列表;并且名为employeeList
!”
您以这种方式获得的列表对象不再是通用的。 它只接受并返回Employee
类型的对象。 但是列表的行为是以“通用”方式定义的,它并不关心它实际使用的对象。 它只是在内部称它们为’ T
‘,因为对于列表应该做的所有事情,它的内容类型并不重要。
将T
视为变量名称。 您必须指定其值,即。 使通用类“具体”。 因此,您可以创建List
, List
或List
您想要的任何其他内容。
你声明一个Foo对象列表,如下所示:
List fooList;
类型名称中的占位符是您在实例化时放入通用列表的“真实”对象类型的占位符。
MSDN上的这篇文章应该对你有很大的帮助。
当您执行List
,请确保您的Object类是公共的。 在默认的VS安装中,类是开箱即用的“内部” – 意味着您无法列出它们,因为它们比您声明的公共列表更难访问。
这让我…昨天。 愚蠢的默认值。
您是尝试使用List类还是尝试构建自己的类? 你的代码目前是什么样的?