使用泛型类型作为泛型参数的最优雅方法是什么?

时间:2010-08-05 00:15:00

标签: c# generics syntax

我想知道是否有比这个例子更优雅的方式将泛型类型用作通用参数:

public class Wrapper<TObject>
    where TObject : MyBaseClass
{
}

public class WrapperCollection<TWrapper, TObject> : Collection<TWrapper>
    where TWrapper : Wrapper<TObject>
    where TObject : MyBaseClass
{
}

实际上,如果我想初始化WrapperCollection的一个实例,我会这样做:

WrapperCollection<Wrapper<MyClass>, MyClass> collection = 
            new WrapperCollection<Wrapper<MyClass>, MyClass>();

因为我对此并不满意,所以真正优雅的是能够像那样初始化它:

WrapperCollection<Wrapper<MyClass>> collection = 
            new WrapperCollection<Wrapper<MyClass>>();

所以我的问题很简单:有没有办法做到这一点,还是有更优雅的设计用于我的CollectionWrapper?

感谢。

1 个答案:

答案 0 :(得分:1)

如果WrapperCollection<T> 总是包含Wrapper<T>的集合,那么您可以这样做:

public class WrapperCollection<TObject> : Collection<Wrapper<TObject>>
    where TObject : MyBaseClass
{
}

...

WrapperCollection<MyClass> collection = new WrapperCollection<MyClass>();