所以我有一个基本类型的列表。这个基类型有两个派生类,其中一个是泛型的。我试图遍历列表并发现了这种奇怪的行为。
public static void Test<T>()
{
List<Base> myList = new List<Base>();
myList.Add(new aDerived());
myList.Add(new tDerived<T>());
foreach (tDerived<T> lGen in myList as List<tDerived<T>>)
{
// This is fine
}
foreach (aDerived lDerived in myList as List<aDerived>)
{
// Error: Can't convert... via a reference conversion etc
}
}
//Simple classes to repro:
class Base
{
}
class aDerived : Base
{
}
class tDerived<T> : Base
{
}
这会报告错误CS0039如果指定了类型,即我没有使用参数方法将 T 替换为 int,那么我在第一个循环中也会遇到相同的错误。
问:为什么会这样。我看不到任何本质上不可能的事情,毕竟我可以as
对每次迭代的返回类型进行操作。另一方面,如果事物是模板类,为什么它会起作用,似乎这不应该帮助它起作用。