首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C#中使用List<T> (泛型)

在C#中使用List<T> (泛型)
EN

Stack Overflow用户
提问于 2013-10-02 22:11:16
回答 4查看 95.6K关注 0票数 32

这是一个非常基本的问题,但我以前从未深入研究过泛型,我发现自己需要使用它。不幸的是,我现在没有时间浏览任何教程,到目前为止,我找到的相关问题的答案并不是一个人可以称之为基本的东西,所以我们就开始吧:

假设我有以下内容:

代码语言:javascript
复制
List<MyClass1> list1 = getListType1();
List<MyClass2> list2 = getListType2();

if (someCondition)
    MyMethod(list1);
else
    MyMethod(list2);

当然还有

代码语言:javascript
复制
void MyMethod(List<T> list){
    //Do stuff
}

好吧,我以为会这么简单,但显然不是。VS警告我

无法从用法推断出MyMethod(System.Collections.Generic.List)方法的类型参数

如果我编译它,我会得到一个

找不到类型或命名空间名称“T”

错误。

在我找到的许多答案中,我读到我必须声明什么是T,这是有意义的,但我不能很好地掌握如何在这样一个简单的场景中这样做。当然,这些答案在我的脑海中产生了更多的问题,但现在我只想要一个关于我做错了什么的解释(除了没有学习泛型)以及如何纠正它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-02 22:13:50

您需要对该方法声明T,然后C#才能识别该方法接收的类型。试试这个:

代码语言:javascript
复制
void MyMethod<T>(List<T> list){
    //Do stuff
}

然后通过执行以下操作来调用它:

代码语言:javascript
复制
if (someCondition)
    MyMethod(list1);
else
    MyMethod(list2);

如果要传递给该方法的所有类都共享一个公共基类,则可以使其更加严格:

代码语言:javascript
复制
void MyMethod<T>(List<T> list) where T : MyClassBase
票数 46
EN

Stack Overflow用户

发布于 2013-10-02 22:14:07

您需要将T的泛型类型参数添加到您的方法:

代码语言:javascript
复制
void MyMethod<T>(List<T> list) {

否则,编译器不知道T代表什么。

票数 14
EN

Stack Overflow用户

发布于 2013-10-02 22:13:55

您需要让c#知道发送的是什么类型:

代码语言:javascript
复制
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
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19138991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档