You can use an IEnumerable to encapsulate the list quite easily:
public IEnumerable<Dog> GetDogs()
{
foreach (Dog dog in _dogs)
{
yield return dog;
}
}
This allows you to enumerate the list from outside the class, but not have access to the underlying list.
//Outside Animals class
foreach (Dog dog in animalObj.GetDogs())
{
//do stuff
}