Possible Duplicate:
Question about C# covariance
Why does the code compile in the first case, but doesn't compile in the second one?
class ClassA {
}
class ClassB : ClassA {
}
static void Main() {
var classAList = new List<ClassA>();
var classBList = new List<ClassB>();
IEnumerable<ClassA> classAIEnumerable;
IEnumerable<ClassB> classBIEnumerable = new List<ClassB>();
// First case:
classAIEnumerable = classBIEnumerable;
// Second case:
classAList = classBList;
}
What does prevent code to compile in the second case? Why can't compiler figure out that this casting is safe?