这是一个非常基本的问题,但我以前从未研究过仿制药,我发现自己需要使用它.不幸的是,我现在没时间通过任何教程,到目前为止我找到的相关问题的答案并不是人们可以称之为基本的,所以我们去:
假设我有以下内容:
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是有意义的,但是我不能完全理解如何在如此简单的场景中这样做.当然,那些答案在我的脑海中创造了更多的问题,但是现在我只想解释一下我做错了什么(除了不研究泛型)以及如何使它正确.
mat*_*mmo 42
您需要声明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
Chr*_*tle 13
您需要将泛型类型参数添加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
}
| 归档时间: | 
 | 
| 查看次数: | 74635 次 | 
| 最近记录: |