Fugaが内部でこういうことやるかもしれないじゃん?
hogeList.Add(new C());
// class C : B {}

Fugaが読み取りしかしないならIReadOnlyList<B>を使うという方法がある