我有一个公共属性集,格式为ListE<T>,其中:

public class ListE<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

是的,它是满口的,但这就是Designer在“属性”窗口中显示为可编辑集合所需的内容。它做到了!因此,我单击小[..]按钮编辑集合,然后单击添加以将项目添加到集合中。

  

算术运算导致溢出。

现在,这是一个非常基本的List,只不过是一个扩展的数组。在整个事物中接近算术的唯一部分是在扩展函数中,甚至使用左移而不是乘法,因此不会溢出。这一切都让我觉得这个异常是在Designer中引发的,可能是由于我对实现细节的一些小注意力不集中,但我找不到测试或调试该场景的方法。有没有人有任何聪明的想法?

编辑:是的,我可以成功使用该属性,甚至可以手动使用,即。在OnLoad处理程序中,我想如果我不能使这个工作,我将不得不诉诸,但这不是理想的。 :(

有帮助吗?

解决方案

我无法理解是什么激励你尝试重新发明List <!> lt; T <!> gt;以这种方式转动,但要回答你的问题:我会添加一行<!>“System.Diagnostics.Debugger.Break()<!>”;到你班级的构造者。

然后尝试在设计器中使用它,并且您将获得一个弹出窗口,询问您是否要附加调试器。将Visual Studio的第二个实例作为调试器附加,您将能够在代码中设置一些断点并开始调试。

其他提示

一个开始的地方是它可能正在用ListE`1 :: Count属性进行数学运算。如果它有一些微妙的缺陷(即它比返回this.innerList.Count更复杂),它可能导致设计者在某些操作上算术溢出。除非特别要求使用

,否则通常不会发生算术溢出
checked
{
   // ...
}

语法。

您不必添加Debugger.Break();调用你的代码来调试它。你可以打开一个不同的VS实例并附加到你使用它的那个实例上,你应该可以调试它而没有任何问题(只需要确保你已经加载了符号)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top