gpt4 book ai didi

c# - 为什么调用我的 List.Clear() 会抛出 ArgumentOutOfRangeException?

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:55 25 4
gpt4 key购买 nike

我有一个 List<Point>应该经常清除,因为每次迭代使用一次值,我得到一个 ArgumentOutOfRangeException在调用 Clear() 时方法。

我阅读了有关多线程的解释,但据我所知,我没有创建任何线程(除非 c# 以某种方式自动执行 for 或 while 循环,但我对此表示怀疑)。

这是我的代码:

List<Point> temp = new List<Point>();
List<Point> visited = new List<Point>();
// other initializations
for(int i = 0; i < points.Count;i++){
if(temp.Count != 0)
temp.Clear(); // Problem occurs here
temp.Add(A);
temp.Add(B);
temp.Add(C);
temp.Add(D);
while(!(visited.Contains(temp[0]) && visited.Contains(temp[1])...){
// calculate some stuff
for(int j = 0; j <4;j++)
visited.Add(temp[j]);
// use point of interests
temp.Clear(); // no issue on this clear
temp.Add(newA);
temp.Add(newB);
temp.Add(newC);
temp.Add(newD);
}
// display results
}

它从第一个 temp.Clear() 抛出 ArgumentOutOfRangeException称呼。

我还注意到,如果我清除与问题相同位置的访问列表 temp.Clear() , 我犯了同样的错误。

对我来说,这似乎是一个特定于 c# 的问题,而且由于我对这种语言非常陌生,所以我想知道我是否不理解某些东西。

最佳答案

我认为您的异常是当您尝试访问您的 temp 项时,List.Clear() 不会抛出 ArgumentOutOfRangeException 因为先实现 IList.Clear()最后 ICollection.Clear() ,他们只是从 .net2 抛出 NotSupportedException 直到现在不是 ArgumentOutOfRangeException,如果你在不同的线程中调用你的方法,我猜你的问题在这几行中:

    while(!(visited.Contains(temp[0]) && visted.Contains(temp[1])...){
//calculate some stuff
for(int j = 0; j <4;j++)
visited.Add(temp[j]);

你可以通过在lock中包围这部分来解决它堵塞。

此外,最好使用 visited.Intersect(temp).Count ==0 而不是长 if 条件。

编辑:根据您更新的问题,问题很清楚:

while(... (current != points[i + 1])) ooopps

当 i = n - 1 时,points[i + 1] 超出范围。

关于c# - 为什么调用我的 List<Point>.Clear() 会抛出 ArgumentOutOfRangeException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9507630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com