0

考虑这个通用类:

class TList<T> : System.Collections.Generic.List<T> {
}

我有另一个包含这些列表的通用列表类,可能需要处理它们的成员:

class TListList<U, T> : System.Collections.Generic.List<U> where U : TList<T>
{
   public void Foo() {
      foreach(U list in this) {
        T bar = list[0];
      }
   }
}

这是一个具体的实现:

class FooList : TList<Foo> {}
class FooListList : TListList<FooList, Foo> {}

我想做是在规范中删除 T 类型参数,TListList并让编译器在子句中注意到它,where并使其对 的成员可用TListList

class TListList<U> where U : TList<T> { ...same Foo() as above... }

class FooList : TList<Foo> {}
class FooListList : TListList<FooList> {}

这可能吗,我只是走错了路,还是语言无法做到这一点?

4

1 回答 1

1

不,这是不可能的。每个不同的泛型类型必须提前声明——你不能T在 list 中省略<U, T>,因为 thenT是一个未声明的标识符。

(Also, I'm sure you know this, but inheriting from List<> is a very bad thing to do. Implement IList<> instead, and delegate to an implementation.)

于 2012-09-20T21:06:50.367 回答