在C#中使用List (generics)

这是一个非常基本的问题,但我以前从未研究过仿制药,我发现自己需要使用它。 不幸的是我现在没时间通过任何教程,到目前为止我找到的相关问题的答案并不是人们可以称之为基本的,所以我们去:

假设我有以下内容:

List list1 = getListType1(); List list2 = getListType2(); if (someCondition) MyMethod(list1); else MyMethod(list2); 

而且当然

 void MyMethod(List list){ //Do stuff } 

好吧,我认为这很简单,但显然不是。 VS警告我

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

无论如何,如果我编译它,我得到一个

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

错误。

在我发现的许多答案中,我读到我必须声明T是什么,这是有道理的,但我无法理解如何在如此简单的场景中这样做。 当然,那些答案在我的脑海里创造了更多的问题,但是现在我只想解释一下我做错了什么(除了不研究generics)以及如何使它正确。

您需要针对该方法声明T ,然后C#可以识别该方法正在接收的类型。 试试这个:

 void MyMethod(List list){ //Do stuff } 

然后通过这样做来调用它:

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

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

 void MyMethod(List list) where T : MyClassBase 

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

 void MyMethod(List list) { 

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

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

 List list1 = getListType1(); List list2 = getListType2(); if (someCondition) MyMethod(list1); else MyMethod(list2); void MyMethod(List list){ //Do stuff } 

基本上,在C#中, List < T >类表示可以通过索引访问的强类型对象列表。

并且它还支持存储特定类型的值,而无需转换到对象或从对象转换。

我们可以在List中使用Interger值和String Value。