如何创建一个具有泛型类型参数的对象列表

3

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

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

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

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


1
如果在类对象中有类型参数,您应该在那里传递一个类型。对于我来说,您需要创建一些接口,因为您无法在那里传递T。 - Kamil Budziewski
1个回答

6

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

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>());
  • 你还可以使它具有协变性。 (接口将具有协变泛型参数。这取决于你在接口上需要的成员是否有意义。)
  • 与其拥有“未分类”成员,不如给它们相同的名称并显式地实现它们。但是当拥有复杂的接口和类层次结构时,有时会遇到麻烦,而只是用不同的名称可能更容易。

成功了。我犯了一个新手错误,在 where T : class 后添加了接口,而不是在类名之后立即添加,因此它未继承。感谢您让我再次审视它,并更清楚地了解我的目的! - GP24

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接