2015-05-29 4 views
1

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

public NavigationMenuItemsCollection MenuItems { get; set; } 

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

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

enter image description here

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

ответ

1

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

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

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

public class NavigationMenuItemCollection : CollectionBase { 

    public NavigationMenuItem this[ int index ] { 
     get { 
     return((NavigationMenuItem) List[index]); 
     } 
     set { 
     List[index] = value; 
     } 
    } 
    ... 
+1

Ах. Это имеет большой смысл. Я добавил индексатор, и он работал отлично. Благодаря! – ernest