[解决]使用泛型类型“System.Collections.Generic.List<T>”需要1个类型参数
作者:admin 时间:2023-5-4 18:28:29 浏览:今天从网上复制过来一段代码,结果下面这行代码报错了:
var list = new List();
报错提示为:
使用泛型类型“System.Collections.Generic.List<T>”需要1个类型参数
之后我把这行代码改为如下这样:
List<String> list = new List<String>();
编译成功,并且执行结果完全正确。
为什么要这样改写代码?这就需要我们了解一下C#泛型类之List<T>
。
C#泛型类 List<T> 的定义
System.Collections.Generic.List<T> 类表示可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法。T为类型参数,代表列表中元素的类型。该类实现了IList<T>
泛型接口,是ArrayList
类的泛型等效类,其大小可按需动态增加。
List<T> 转换 t 列表为对象
在 C# 中,可以使用 System.Collections.Generic.List<T>
类型来创建一个具有强类型元素的列表。如果你有一个 t 列表,你可以通过将其传递给 List<T>
的构造函数来将其转换为 List<T>
类型。
例如,如果 t 列表包含整数类型的元素,你可以使用以下代码将其转换为 List<int>
类型:
List<int> c = new List<int>(t);
此代码将创建一个名为 c 的新列表,其中包含 t 列表中的所有整数元素。如果你的 t 列表包含其他类型的元素,只需将 int
替换为相应的类型即可,比如,如果 t 列表包含字符串类型的元素,你可以使用以下代码将其转换为 List<String>
类型:
List<String> list = new List<String>();
这正是本文开头报错代码的正确写法。
需要注意的是,这个操作可能会耗费一些时间和内存,具体取决于 t 列表的大小。如果你的 t 列表非常大,而且你只需要遍历其元素,那么你可能会希望仅使用 IEnumerable<T>
接口或使用 foreach
循环进行遍历,而不需要将其转换为 List<T>
类型。
List<T> 构造函数
名称 | 说明 |
---|---|
List<T>() | 初始化 List<T> 类的新实例,该实例为空并且具有默认初始容量(0)。 |
List<T>(IEnumerable<T>) | 初始化 List<T> 类的新实例,该实例包含从指定集合复制的元素并且具有足够的容量来容纳所复制的元素。 |
List<T>(Int32) | 始化 List<T> 类的新实例,该实例为空并且具有指定的初始容量。 |
备注
1、 List<T>
类既使用相等比较器又使用排序比较器。
诸如 Contains
、IndexOf
、LastIndexOf
和 Remove
这样的方法对列表元素使用相等比较器。类型 T 的默认相等比较器按如下方式确定。如果类型 T 实现 IEquatable<T>
泛型接口,则相等比较器为该接口的 Equals(T)
方法;否则,默认相等比较器为 Object.Equals(Object)
。
诸如 BinarySearch
和 Sort
这样的方法对列表元素使用排序比较器。类型 T 的默认比较器按如下方式确定。如果类型 T 实现 IComparable<T>
泛型接口,则默认比较器为该接口的 CompareTo(T)
方法;否则,如果类型 T 实现非泛型 IComparable
接口,则默认比较器为该接口的 CompareTo(Object)
方法。如果类型 T 没有实现其中任一个接口,则不存在默认比较器,并且必须显式提供比较器或比较委托。
2、 List<T>
不保证是排序的。在执行要求 List<T>
已排序的操作(例如 BinarySearch)之前,你必须对 List<T>
进行排序。
3、 List<T>
不保证是排序的。在执行要求 List<T>
已排序的操作(例如 BinarySearch)之前,你必须对 List<T>
进行排序。
4、 使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。
5、 List<T>
接受 null
作为引用类型的有效值并且允许有重复的元素。
6、 大多数情况下List<T>
执行得更好并且是类型安全的,可以替换ArrayList
,但是如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List<T>
类的实现。这意味着不必对 List<T>
对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。如果创建小于500个元素,建议使用ArrayList
。
相关文章
- 站长推荐