如何使用泛型类型参数创建对象列表

时间:2013-07-02 05:42:36

标签: c# oop

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

var obj1 = new Object<SomeType>();
var obj2 = new Object<SomeOtherType>();

var list = new List<Object<WhatGoesHere>{ obj1, obj2 };

我知道我可以使用一个接口,如果它只是一个不同对象的列表,但似乎不适用于具有不同类型参数的对象列表,所以我有兴趣知道我的选项在这里?

1 个答案:

答案 0 :(得分:4)

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

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>());
  • 你也可以让它变得协变。 (接口将有一个协变泛型参数。如果这有意义,它取决于你在接口上需要的成员。)
  • 您可以给它们相同的名称并明确地实现它们,而不是拥有“无类型”成员。但是,有时候在遇到复杂的接口和类层次结构时会遇到麻烦,而且给它们添加不同的名称可能会更容易。