错误:System.IndexOutOfRangeException:索引超出了数组的范围

时间:2014-01-30 08:50:39

标签: c# arrays asp.net-mvc-4 razor

我正在尝试使用Razor实现此算法,但是,我得到了此异常

  

System.IndexOutOfRangeException:索引超出了数组的范围。

@{ 
//....
for (int i = tab[0]; i <= tab[4]; i++)
        {
            if (i == pagination.numPageCourrante)
            {
                <li class="active"><a href="#">@i <span class="sr-only">(current)</span></a></li>
            }
            else
            {//from here the exception triggers
                <li><a href="/Accueil/Rechercher?rech=micro&type=nomAppMetier&num=@(tab[i])">@i </a></li>
            }

        }

}

知道表的声明是:

int[] tab = new int[5];

非常感谢!

4 个答案:

答案 0 :(得分:2)

好像你的逻辑错了。

如果tab[4]10,该怎么办?在这种情况下,您的循环将运行10次,但您的数组没有10项。这就是为什么你的例子中可能会得到IndexOutOfRangeException的原因。 tab[4]可能会大于4,这就是为什么您的程序会尝试访问您的数组没有的索引

数组是零索引的。使用;

定义包含5个项目的数组时
int[] tab = new int[5];

您可以访问已编入索引04的项目。

听起来你只需要像使用它一样;

int[] tab = new int[5];
for (int i = 0; i < tab.Length ; i++)
{
    if (tab[i] == pagination.numPageCourrante)
    {
        //...
    }
}

答案 1 :(得分:0)

我想您不希望将数组中的值用作for循环的开头和结尾。为了使其工作,您可以执行以下任一操作:

for (int i = 0; i < tab.Length; i++)
{
    var value = tab[i];
    // use value ...
}

或者,您也可以使用foreach:

foreach(int value in tab)
{
    // use value ...
}

答案 2 :(得分:0)

您的不同i值为:tab[0]tab[1]tab[2]tab[3]tab[4]

然后,当您致电tab[i]时,您实际致电tab[tab[x]]。 x依次为0,1,2,3,4。如果tab值中的任何值不在区间[0,4]中,例如12,则尝试到达tab[12]并且IndexOutOFRangeException被抛出。

如果您想简单地遍历数组,那肯定是错误的地方。

这两种正确的方法是使用for循环:

for (int i = 0; i < tab.Length; i++)
{
    // Your code here
}

或使用foreach循环:

foreach(int i in tab)
{
    // Your code here
}

答案 3 :(得分:0)

如果你这样输入......你可以在html数组中得到绑定错误:

此处错误发生在名称

 <td style="width:10%"> @Html.DropDownList("InvoiceUnitID_"+@i, new SelectList(ViewBag.UnitOfMeasures, "Value", "Text", @Model.salesInvoiceVMList[i].InvoiceUnitID), htmlAttributes: new { id = "InvoiceUnitId", name = "InvoiceUnitID"[@i], @disabled="disabled" })</td>

而不是:像那样使用

 <td style="width:10%"> @Html.DropDownList("InvoiceUnitID_"+@i, new SelectList(ViewBag.UnitOfMeasures, "Value", "Text", @Model.salesInvoiceVMList[i].InvoiceUnitID), htmlAttributes: new { id = "InvoiceUnitId", name = "InvoiceUnitID[@i]", @disabled="disabled" })</td>