我正在尝试使用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];
非常感谢!
答案 0 :(得分:2)
好像你的逻辑错了。
如果tab[4]
为10
,该怎么办?在这种情况下,您的循环将运行10
次,但您的数组没有10
项。这就是为什么你的例子中可能会得到IndexOutOfRangeException
的原因。 tab[4]
可能会大于4
,这就是为什么您的程序会尝试访问您的数组没有的索引。
数组是零索引的。使用;
定义包含5个项目的数组时int[] tab = new int[5];
您可以访问已编入索引0
至4
的项目。
听起来你只需要像使用它一样;
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>