我有一个公共属性集,格式为ListE<T>
,其中:
public class ListE<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
是的,它是满口的,但这就是Designer在“属性”窗口中显示为可编辑集合所需的内容。它做到了!因此,我单击小[..]按钮编辑集合,然后单击添加以将项目添加到集合中。
算术运算导致溢出。
现在,这是一个非常基本的List,只不过是一个扩展的数组。在整个事物中接近算术的唯一部分是在扩展函数中,甚至使用左移而不是乘法,因此不会溢出。这一切都让我觉得这个异常是在Designer中引发的,可能是由于我对实现细节的一些小注意力不集中,但我找不到测试或调试该场景的方法。有没有人有任何聪明的想法?
编辑:是的,我可以成功使用该属性,甚至可以手动使用,即。在OnLoad
处理程序中,我想如果我不能使用它,那就是我将不得不求助的东西,但这并不理想。 :(
答案 0 :(得分:3)
我无法理解是什么促使你尝试重新发明List&lt; T&gt;以这种方式轮流,但回答你的问题:我会在你的类的构造函数中添加一行“System.Diagnostics.Debugger.Break()”。
然后尝试在设计器中使用它,并且您将获得一个弹出窗口,询问您是否要附加调试器。将Visual Studio的第二个实例作为调试器附加,您将能够在代码中设置一些断点并开始调试。
答案 1 :(得分:0)
一个开始的地方是它可能正在用ListE`1 :: Count属性进行数学运算。如果它有一些微妙的缺陷(即它比返回this.innerList.Count更复杂),它可能导致设计者在某些操作上算术溢出。除非特别要求使用
,否则通常不会发生算术溢出checked
{
// ...
}
语法。
答案 2 :(得分:0)
您不必添加Debugger.Break();调用你的代码来调试它。你可以打开一个不同的VS实例并附加到你使用它的那个实例上,你应该可以调试它而没有任何问题(只需要确保你已经加载了符号)。