2012-12-07 234 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 Type [] {typeof(ItemType)};那么我应该如何改变递归函数 – user1885308

0

我解决了这个问题,具体如下:

public ItemType this[int i] 
{ 
    get 
    { 
     return (ItemType)((IList)this)[i]; 
    } 
    set 
    { 
     this[i] = value; 
    } 
} 
相关问题