如何使以下代码工作?我认为我不太了解 C# 泛型。也许,有人可以指出我正确的方向。
public abstract class A
{
}
public class B : A
{
}
public class C : A
{
}
public static List<C> GetCList()
{
return new List<C>();
}
static void Main(string[] args)
{
List<A> listA = new List<A>();
listA.Add(new B());
listA.Add(new C());
// Compiler cannot implicitly convert
List<A> listB = new List<B>();
// Compiler cannot implicitly convert
List<A> listC = GetCList();
// However, copying each element is fine
// It has something to do with generics (I think)
List<B> listD = new List<B>();
foreach (B b in listD)
{
listB.Add(b);
}
}
这可能是一个简单的答案。
更新:首先,这在 C# 3.0 中是不可能的,但在 C# 4.0 中是可能的。
要让它在 C# 3.0 中运行,这只是 4.0 之前的一种解决方法,请使用以下命令:
// Compiler is happy
List<A> listB = new List<B>().OfType<A>().ToList();
// Compiler is happy
List<A> listC = GetCList().OfType<A>().ToList();