Если вы используете что-либо ниже, чем .NET 4.0, вам придется использовать IEnumerable.Cast :
IEnumerable<Square> squares = new List<Square>();
// Fill the collection
IEnumerable<Shape> shapes = squares.Cast<Shape>();
.NET 4.0 представляет новые функции Covariance и Contravariance, которые позволяют вам выполнять это приведение напрямую:
IEnumerable<Square> squares = new List<Square>();
IEnumerable<Shape> shapes = (IEnumerable<Shape>)squares;