如何制作具有泛型类型参数的对象列表

本文关键字:对象 列表 泛型类型参数 何制作 | 更新日期: 2023-09-27 18:20:44

我有一个接受类型参数的对象,称之为Object<T>,并且需要能够将许多具有不同类型参数的物体添加到列表中,如下所示:

var obj1 = new Object<SomeType>();
var obj2 = new Object<SomeOtherType>();
var list = new List<Object<WhatGoesHere>{ obj1, obj2 };

我知道如果接口只是不同对象的列表,我可以使用它,但这似乎不适用于具有不同类型参数的对象列表,所以我很想知道我的选项是什么?

如何制作具有泛型类型参数的对象列表

通常最好创建一个接口。我在大多数泛型类上都有接口,以便在不知道泛型参数的情况下使用它们。

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>());
  • 你也可以使它协变。(接口将有一个协变泛型参数。这取决于接口上需要的成员是否合理。)
  • 您可以赋予它们相同的名称并显式地实现它们,而不是拥有"非类型化"的成员。但有时在拥有复杂的接口和类层次结构时会遇到麻烦,只给它们取一个不同的名称可能会更容易