Even if B was a subclass of A, casting a List<B> to a List<A> is bad because it could allow you to add to that list instances of A (but not B) and the compiler would happily do that, even though it would not agree with the actual (runtime) type of the collection.