【发布时间】:2017-06-28 15:01:58
【问题描述】:
这是一个非常基本的问题,但我以前从未深入研究过泛型,我发现自己需要使用它。不幸的是,我现在没有时间阅读任何教程,而且到目前为止我找到的相关问题的答案都不是基本的,所以我们开始吧:
假设我有以下内容:
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 是什么,这是有道理的,但在如此简单的场景中我无法完全掌握如何做到这一点。当然,这些答案在我的脑海中产生了更多问题,但现在我只想解释我做错了什么(除了不研究泛型)以及如何改正。
【问题讨论】:
-
一方面,确保您使用 System.Collections.Generic;包括在内。
-
泛型不是这样工作的。
MyMethod(List<T> list)是无效的方法签名(除非您的类是具有类型参数T的泛型类) -
MyClass1和MyClass2有一些共同的基本类型或接口吗?它们有很多共同的属性或方法吗?