Если вы используете IEnumerable
вместо этого, он будет работать (по крайней мере, в C # 4.0, я не пробовал предыдущие версии). Это просто бросок, конечно же, он все равно будет списком.
Вместо -
List<A> listOfA = new List<C>(); // compiler Error
В исходном коде вопроса , use -
IEnumerable<A> listOfA = new List<C>(); // compiler error - no more! :)