这是一个非常基本的问题,但我以前从未深入研究过泛型,但我发现自己需要使用它。不幸的是,我现在没有时间阅读任何教程,而且到目前为止我发现的相关问题的答案并不是人们可以称之为基本的,所以我们开始:
假设我有以下内容:
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”
error.
在我找到的许多答案中,我读到我必须声明什么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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)