首页 > 解决方案 > 索引异常未知

问题描述

我在Visual Studio的第一个打印语句中将下面的代码标记为“索引超出范围异常”,但问题是当我将鼠标悬停在这些值上时,它们都是我所期望的(即c = 1),而自动窗口显示:CurrentBar = 907LSwDMIbar = 905c = 1。Locals 窗口中有一条异常行,但是当我展开它时,它并没有给我任何线索,或者我过去遇到过这个问题,并且在使用 VS 进行调试时,我可以看到负值,但我不能现在看什么。

我追踪它以块FlatDMI[a]打印if (PrintDmiSwing && c > 0),但我不明白为什么。

我在哪里可以找到错误?

谢谢

  private int c;
   ... 

  if (!FlatInd && Math.Abs(DMI1[1] - DMI1[2]) < 0.0001)   
  {

    var newFlat = DMI1[1];
    FlatDMI.Add(newFlat);
    FlatInd = true;
    if (!FlatIndBar)
    {
      flatDMIbar = CurrentBar - 2;   
      FlatIndBar = true;                                
    }
       if (PrintFlat && a > 0)
         Print("Flat DMI | " + Time[0] + " | Current Bar = " + CurrentBar 
         + string.Format("\r\nFlatDMI[0] =  {0 :F4} | FlatDMI[1] =  {1:F4}", 
         FlatDMI[a], FlatDMI[a-1]) + " | flatDMIbar = " + flatDMIbar + " | a  
          = " + a + "\r\n-");        
     a++;                           
    }
   else
  { 
  FlatInd = false;
  FlatIndBar = false;                           
 }
 if (!LSwDMIbool && DMI1[1] - DMI1[2] > 0.001 && DMI1[3] - DMI1[2] > 
 0.001)
 {                      
    lSwDMI = DMI1[2];
    LSwDMI.Add(lSwDMI);
    LSwDMIbar = CurrentBar - 2;
    var lSwDMIprice = Lows[2].GetValueAt(LSwDMIbar);
    LSwDMIprice.Add(lSwDMIprice);                       
    LSwDMIbool = true;                        
    if (PrintDmiSwing && c > 0)
   {
     Print("DMI Swing Low | " + Time[0] + " | Current Bar = " + CurrentBar 
    + string.Format("\r\nLSwDMI[0] = {0:F4} | LSwDMI[1] = {1:F4}", 
    LSwDMI[c], LSwDMI[c - 1]) + " | FlatDMI[a] = " + FlatDMI[a] + " 
    | LSwDMIbar = " + LSwDMIbar + " | LSwDMIprice[0] = " +     
    LSwDMIprice[c] + " | LSwDMIprice[1] = " + LSwDMIprice[c - 1] + " | c = 
    " + c + "\r\n-");
    foreach (double lSwDM in LSwDMI)
      Print(string.Format("LSwDMI = {0:F4}", lSwDM));
   }    
   c++;                                         
  }     

标签: c#indexoutofboundsexception

解决方案


推荐阅读