C# 创建IList<;T>;项目名称<;U>;?

C# 创建IList<;T>;项目名称<;U>;?,c#,.net,generics,c#-3.0,C#,.net,Generics,C# 3.0,我有一个对象,比如说Item。我想创建一个(n)(I)列表,其中包含这些项目的集合。我遇到的问题是,Item的集合中可以有任意数量的U的不同类型 我搞不清楚的是用于IList的签名。我尝试了IList,但因为我(在使用IList的类中)没有T的定义(正如我所说的varys),所以我不能使用此签名。达到这一要求的最佳方法是什么?您可以使您的方法具有通用性,例如: public void DoSomethingWithTheList<T>(IList<Item<T>&g

我有一个对象,比如说
Item
。我想创建一个(n)
(I)列表,其中包含这些项目的集合。我遇到的问题是,
Item
的集合中可以有任意数量的U的不同类型


我搞不清楚的是用于
IList
的签名。我尝试了
IList
,但因为我(在使用
IList
的类中)没有
T
的定义(正如我所说的varys),所以我不能使用此签名。达到这一要求的最佳方法是什么?

您可以使您的方法具有通用性,例如:

public void DoSomethingWithTheList<T>(IList<Item<T>> theList)
{
    //Do that something
}
public void dosomethingwhiththelist(IList theList)
{
//做点什么
}
您可以试试这个

class Item<U>
{
   ...
}


class Item : Item<object> {
   ...
}

....
IList<Item> itemList;
类项目
{
...
}
类别项目:项目{
...
}
....
IList项目列表;
我想你只是想要一个
IList
。关键是泛型类型
IList
名称中的
T
只是一个占位符,没有任何特殊意义。您需要一个
项的列表,所以只需创建一个


现在,这当然意味着包含此
IList
的方法/类本身在
U
中是泛型的,但这似乎是由您的问题的术语决定的。

您需要将非泛型接口添加到
中,并使用这些接口创建集合

无法创建
IList
的集合,其中T是要放入同一列表的许多不同对象类型的基本类型。这是co(ntra)-明确禁止的偏差

因此,您需要添加一些常见的东西,而不是通用的,并从中列出。例如,您可以使
实现
IItem
,并创建
IList


这是你能做的最好的了。

一个IList就是用来保存一种类型的。要确定某个对象是否为“单一类型”,必须展开所有类型参数。以
IList
为例,
T
对于特定实例必须是且仅是一件事

例如,您可以为
T
选择
Animal
,然后继续在
IList
中放置
Dog
Cat
Bear
实例。但是你不能把任意类型放在那里;它们必须能够转换为您为
T
指定的类型。如果您的类型是以这种方式关联的,并且不是以这种方式关联的,那么除了为列表提供非泛型接口之外,您别无选择。您还可以考虑为所有符合条件的项目定义一个接口类型。 一旦您决定了
T
将是什么,您就可以使您的方法成为通用的:

public void PrintItems<T>(IList<Item<T>> list)
{
  // ...
}
公共作废打印项(IList列表)
{
// ...
}

在.NET3中有点麻烦,因为不同U的所有项都被视为独立类型。要使其正常工作,您必须手动为此类型引入一个接口:

interface IItem{}

class Item<U>:IItem {...}
接口IItem{}
类项:IItem{…}
现在你可以:

IList<IItem> list = new IList<IItem>();
list.Add(new Item<string>());
list.Add(new Item<int>());
IList list=new IList();
添加(新项());
添加(新项());

或者,您可以坚持使用非通用列表。

这似乎是实现我需要的最干净的方法。不知什么原因,我就是没有想到。谢谢。您仍然无法将项目和项目放入项目列表。通常,您需要执行类Item{}class Item:Item{}来实现此功能。