Прежде всего вам нужно прочитать о ссылочных типах.Вы можете попытаться написать код самостоятельно, чтобы увидеть, что происходит, если вы не ленивый :)
Истинное поведение состоит в том, что если кто-то удаляет объект из списка, это не означает, что объект удаляется из памяти.,Сборщик мусора проверяет, есть ли у объекта ссылки на него, и в вашем случае myFavoriteFoo содержит ссылку, поэтому GC не удалит объект.
В случае удаления - в C # нет способа принудительно удалить объект вручную,даже если вы вызываете dispose или destructor, объект проверяется сборщиком мусора, и объект будет удален ТОЛЬКО, если на него будет 0 ссылок.
Это верно для обычных ссылок.Также в .Net есть класс WeakReference, который переопределяет правила для регулярных ссылок.