Generics 有没有办法在C#3.0中实现泛型类型的协方差?

Generics 有没有办法在C#3.0中实现泛型类型的协方差?,generics,c#-3.0,covariance,Generics,C# 3.0,Covariance,这已经在C#4.0中引入,但有没有办法在C#3.0中实现这一点 例如,考虑下面的代码: class Base { } class Derived1 : Base { } class Derived2 : Base { } class User<T> where T : Base { } class User1 : User<Derived1> { } 类基 { } 派生类1:基 { } 派生类2:基 { } 类User,其中T:Base { } 类User1:U

这已经在C#4.0中引入,但有没有办法在C#3.0中实现这一点

例如,考虑下面的代码:

class Base
{
}

class Derived1 : Base
{
}

class Derived2 : Base
{
}

class User<T> where T : Base
{
}

class User1 : User<Derived1>
{
}
类基
{
}
派生类1:基
{
}
派生类2:基
{
}
类User,其中T:Base
{
}
类User1:User
{
}
现在,我想要一个
用户
列表,我可以在其中存储
用户
以及
用户
,但以下代码无法在C#3.0中编译:

列表用户=新列表();
添加(新User1());

有什么想法吗?

最简单的方法可能是使用
ArrayList
List
并自己处理角色转换。在C#3中没有优雅的方法可以做到这一点。

不仅没有好的解决方法,而且你的代码在C#4.0中也无法工作-只有界面和委托支持差异,因此你永远无法将
用户
视为
用户

如果你能在C#3中实现它,他们就不需要在C#4中引入它。而且,没有所谓的C#3.5。这是C#3.0,.NET 3.5。@John:得分-两个都有有解决办法吗?解决办法是使清单不那么具体。你能做的最不具体的事情就是列出清单。更好的方法可能是创建一个用户类实现的IUser接口,然后您可以创建一个列表。另一个解决方法是使用C#4@蒂姆-你大概是在开玩笑,但请注意F#根本不支持方差。
List<User<Base>> users = new List<User<Base>>();
users.Add(new User1());