я понял. это была моя ошибка, вот как я это исправил
Коллекция наследуется от CollectionBase, где я использовал следующий конструктор
public IData this[int index]
{
get { return (IData)List[index]; }
set { List[index] = value; }
}
все, что я делал, это добавлял это в B-классе
public B this[int index]
{
get { return (B)List[index]; }
set { List[index] = value; }
}