Is there a collection in c# that supports the inheritance like concept that objects can have of appearing to include all the elements from another as well as themselves?
Thats not that tricky
// Adding
Animals.Add( animal );
if( animal is dog )
Dogs.Add( animal );
//Removing
Dogs.Remove( animal );
Animals.Remove( animal );
There is nothing provided by MS that can achieve your functionality, however
You could just keep a set of animal and use linq to filter it on the fly:
var animals = new HashSet<Animal>();
var dogs = animals.OfType<Dog>();
Let dogs and cats inherit from an interface, and create HashSet's of the interface instead of the classes. Or use a base class.
for example:
HashSet<IAnimal>