C# 如何创建具有泛型类型参数的对象列表
我有一个对象使用类型参数-称之为C# 如何创建具有泛型类型参数的对象列表,c#,oop,C#,Oop,我有一个对象使用类型参数-称之为object-并且需要能够将具有不同类型参数的多个对象添加到列表中,如下所示: var obj1 = new Object<SomeType>(); var obj2 = new Object<SomeOtherType>(); var list = new List<Object<WhatGoesHere>{ obj1, obj2 }; var obj1=新对象(); var obj2=新对象(); var list
object
-并且需要能够将具有不同类型参数的多个对象添加到列表中,如下所示:
var obj1 = new Object<SomeType>();
var obj2 = new Object<SomeOtherType>();
var list = new List<Object<WhatGoesHere>{ obj1, obj2 };
var obj1=新对象();
var obj2=新对象();
var list=newlist通常最好创建一个接口。我的大多数泛型类都有接口,可以在不知道泛型参数的情况下使用它们
interface IFoo
{
object UntypedBlah(object arg);
}
class Foo<T> : IFoo
{
object UntypedBlah(object arg)
{
return Blah((T)arg);
}
T Blah(T arg)
{
//...
}
}
List<IFoo> foos = new List<IFoo>();
foos.Add(new Foo<int>());
foos.Add(new Foo<string>());
接口IFoo
{
对象UntypedBlah(对象arg);
}
Foo类:IFoo
{
对象非类型数据库(对象参数)
{
返回Blah((T)arg);
}
T Blah(T arg)
{
//...
}
}
List foos=新列表();
添加(新的Foo());
添加(新的Foo());
- 你也可以让它协变。(接口将有一个协变的泛型参数。这取决于您在接口上需要的成员是否合理。)
- 您可以为它们指定相同的名称并显式实现,而不是使用“非类型化”成员。但有时,当您有复杂的接口和类层次结构时,您会遇到麻烦,而只给它们起一个不同的名称可能会更容易
通常最好创建一个接口。我的大多数泛型类都有接口,可以在不知道泛型参数的情况下使用它们
interface IFoo
{
object UntypedBlah(object arg);
}
class Foo<T> : IFoo
{
object UntypedBlah(object arg)
{
return Blah((T)arg);
}
T Blah(T arg)
{
//...
}
}
List<IFoo> foos = new List<IFoo>();
foos.Add(new Foo<int>());
foos.Add(new Foo<string>());
接口IFoo
{
对象UntypedBlah(对象arg);
}
Foo类:IFoo
{
对象非类型数据库(对象参数)
{
返回Blah((T)arg);
}
T Blah(T arg)
{
//...
}
}
List foos=新列表();
添加(新的Foo());
添加(新的Foo());
- 你也可以让它协变。(接口将有一个协变的泛型参数。这取决于您在接口上需要的成员是否合理。)
- 您可以为它们指定相同的名称并显式实现,而不是使用“非类型化”成员。但有时,当您有复杂的接口和类层次结构时,您会遇到麻烦,而只给它们起一个不同的名称可能会更容易
如果类对象中有类型参数,则应向其传递类型。对我来说,你们需要做一些接口,因为你们不能在那个里传递。若你们在类对象中有类型参数,你们应该在那个里传递一个类型。对我来说,你需要做一些接口,因为你不能通过那里的工作。我犯了一点noob错误,在where T:class之后添加了接口,而不是紧跟在类名之后,因此它不是继承的。谢谢你让我再次看了一遍,更清楚地知道我要做什么!成功了。我犯了一点noob错误,在where T:class之后添加了接口,而不是紧跟在类名之后,因此它不是继承的。谢谢你让我再次看了一遍,更清楚地知道我要做什么!