这是一个非常基本的问题,但是我以前从未研究过泛型,因此发现自己需要使用它。不幸的是,我现在没有时间阅读任何教程,到目前为止,我对相关问题的答案还不算是基本知识,所以我们去了:
假设我有以下几点:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句