При попытке получить индекс класса, который наследуется от CollectionBase, я получаю следующую ошибку: Не удается применить индексирование с помощью []

У меня есть класс, который наследует от CollectionBase,

public NavigationMenuItemsCollection MenuItems { get; set; }

У меня есть метод, который пытается получить элемент из индекса, но он не работает.

public void ActivatePage(int index)
{
   NavigationMenuItem navigationMenuItem = (NavigationMenuItem)MenuItems[0];
}

введите описание изображения здесь

CollectionBase наследует от IList, ICollection, а также IEnumerable, Поэтому я подумал, что это можно проиндексировать. Есть идеи о том, что происходит?

1 ответ

Решение

CollectionBase инвентарь IListсвойство indexer с явной реализацией интерфейса, означающее, что вам обычно приходится приводить коллекцию как IList для того, чтобы иметь доступ к нему.

NavigationMenuItem navigationMenuItem = (NavigationMenuItem)((IList)MenuItems)[0];

Если вы можете изменить исходный код NavigationMenuItemsCollectionВы должны быть в состоянии добавить индексатор к нему самостоятельно, как показано в первом примере здесь.

public class NavigationMenuItemCollection : CollectionBase  {

   public NavigationMenuItem this[ int index ]  {
      get  {
         return( (NavigationMenuItem) List[index] );
      }
      set  {
         List[index] = value;
      }
   }
   ...
Другие вопросы по тегам