在 C# 中使用 List(泛型)
本文关键字:泛型 List | 更新日期: 2023-09-27 18:33:39
这是一个
非常基本的问题,但我以前从未深入研究过泛型,我发现自己需要使用它。不幸的是,我现在没有时间浏览任何教程,到目前为止,我找到的相关问题的答案并不是人们可以称之为基本的,所以我们开始:
假设我有以下内容:
List<MyClass1> list1 = getListType1();
List<MyClass2> list2 = getListType2();
if (someCondition)
MyMethod(list1);
else
MyMethod(list2);
当然,还有
void MyMethod(List<T> list){
//Do stuff
}
好吧,我以为会这么简单,但显然不是。 VS 警告我
方法 MyMethod(System.Collections.Generic.List( 的类型参数无法从用法中推断出来
如果我无论如何编译它,我会得到一个
找不到类型或命名空间名称"T">
错误。
在我找到的许多答案中,我读到我必须声明T
是什么,这是有道理的,但我无法完全理解在如此简单的情况下如何做到这一点。当然,这些答案在我的脑海中产生了更多的问题,但现在我只想解释我做错了什么(除了不研究泛型(以及如何纠正它。
需要针对该方法声明T
,然后 C# 可以标识该方法接收的类型。试试这个:
void MyMethod<T>(List<T> list){
//Do stuff
}
然后通过执行以下命令调用它:
if (someCondition)
MyMethod(list1);
else
MyMethod(list2);
如果要传递给该方法的所有类共享一个公共基类,则可以使其更加严格:
void MyMethod<T>(List<T> list) where T : MyClassBase
您需要将
T
的泛型类型参数添加到您的方法中:
void MyMethod<T>(List<T> list) {
否则,编译器不知道T
表示什么。
你需要让 c# 知道发送的类型:
List<MyClass1> list1 = getListType1();
List<MyClass2> list2 = getListType2();
if (someCondition)
MyMethod<MyClass1>(list1);
else
MyMethod<MyClass2>(list2);
void MyMethod<T>(List<T> list){
//Do stuff
}
基本上,在 C# 中,List < T >
类表示可由索引访问的对象的强类型列表。
它还支持存储特定类型的值,而无需强制转换为对象或从对象转换。
我们可以在列表中使用 Interger 值和字符串值。