c#for循环进入但未满足其条件

时间:2017-07-26 08:48:52

标签: c# .net visual-studio for-loop exception

所以,我有这个for循环:

double spec = 0, tot = 0;
for (int i = 0; i < omega_algo.Length; i++)
{
      if (omega_algo[i] > 0)
          spec = Math.Sqrt(omega_algo[i]);
      else
          spec = 0;
      tot += spec;
 }

myArray.Length = 50 的位置。 我在调试时得到IndexOutOfRangeException并看到 i 50

所以,当for循环不应该( i < myArray.Length false)时,它就会进入!

这种例外仅在偶然发生,这使得它更加奇怪。

有人对此有解释/解决方法吗?我错过了什么,或者这可能是一个奇怪的Visual Studio错误?

修改
我编辑了for循环以显示代码 没有 i 正在增加且 omega_algo 数组根本没有变化。

2 个答案:

答案 0 :(得分:0)

编辑:

根据以下评论,我编写了一个示例应用,您的代码应该按原样运行。

如果你的数组确实长度为50,那么i的值永远不会是50.唯一可行的方法是改变i里面的值{环。

您是否可以提供更多代码来显示使用方式/位置的上下文?如何定义数组等?

答案 1 :(得分:-1)

如果在单个线程上执行,您的代码应该可以正常工作。你有编辑数组的任何线程或异步工作吗?

如果是这样,只需在访问数组之前和编辑之前锁定数组。

lock(myArray)
{
    for (int i = 0; i < myArray.Length; i++)
    {
        int someVar = myArray[i]; //this is where exception is thrown when i=50
    }
}

编辑: 由于omega_algo数组根本没有变化,因此这不是一个线程问题。