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{}来实现此功能。