2

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

例如,考虑以下代码:

class Base
{
}

class Derived1 : Base
{
}

class Derived2 : Base
{
}

class User<T> where T : Base
{
}

class User1 : User<Derived1>
{
}

现在,我想要一个 的列表User<T>,我可以在其中存储User<Derived1>以及User<Derived2>,但以下代码无法在 C# 3.0 中编译:

List<User<Base>> users = new List<User<Base>>();
users.Add(new User1());

有任何想法吗?

4

2 回答 2

2

不仅没有好的解决方法,而且您的代码也无法在 C# 4.0 中运行 - 只有接口和委托支持变体,因此您永远无法将 aUser<Derived>视为User<Base>.

于 2010-04-05T14:33:08.920 回答
0

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

于 2010-04-05T13:58:10.190 回答