One thing that floated around my head a while was the problem that you can't cast a List<SomeDerivedObject> to List<SomeBaseObject>.
A poorman's solution to this was to loop the objects from the one list into the other list. Not an elegant solution though.....
I discovered that you can do this easily with LINQ. When you use a IEnumerable<T> you can do this like this:
Where DerivedList holds objects that inherit from BaseObject.
With a List<T> you could do something like this(copy):
List<BaseObject> baseObjects =
A great LINQ resource is 101 LINQ samples on MSDN.