2012-12-07 5 views
0

Я создал dll с элементами управления. когда я просматриваю dll, он успешно добавляет элементы управления в панель инструментов. проблема заключается в том, что, когда я запустить приложение, я получаю следующее сообщение об ошибке: An unhandled exception of type 'System.StackOverflowException' occurred in xxx.dllНеобработанное исключение типа «System.StackOverflowException»

метод, где отладчик идет выделить ошибка в функции ниже:

public ItemType this[int i] 
{ 
    get 
{ 
    return (ItemType)this[i]; 
} 
set 
{ 
    this[i] = value; 
} 
} 

, как я знаю, происходит эта ошибка из-за рекурсивного вызова, как я могу переписать вышеизложенное или изменить его для преодоления этой проблемы. Пожалуйста, любой код помощи как можно скорее

Благодаря

ответ

2

Вы должны использовать внутренний список в вашем классе.

private IList<ItemType> _list = new List<ItemType>(); 
    public ItemType this[int i] 
    { 
     get 
     { 
      return _list[i]; 
     } 
     set 
     { 
      _list[i] = value; 
     } 
    } 
+0

теперь я получить ссылку на объект не указывает на экземпляр объекта в обратном _list [I]; – user1885308

+0

Сначала сначала выполните инициализацию списка. Конечно, в образце код _list всегда равен нулю. – Tobias

+0

Фактически itemtype был BaseItemCollection ._ knownTypes = new Тип [] {typeof (ItemType)}; то как мне изменить рекурсивную функцию – user1885308

0

Я решил проблему следующим образом:

public ItemType this[int i] 
{ 
    get 
    { 
     return (ItemType)((IList)this)[i]; 
    } 
    set 
    { 
     this[i] = value; 
    } 
} 
Смежные вопросы