【问题标题】:Index was out of range error. But when i excecute item.count() returns 1索引超出范围错误。但是当我执行 item.count() 返回 1
【发布时间】:2021-03-23 09:46:24
【问题描述】:

我在使用 razor 时遇到问题,我正在尝试访问列表的第一个元素。但是当我尝试使用item2.hijos[0].ruta 强制转换元素时,我得到了一个错误。

但是当我使用 item2.hijos.count() 时,它返回 1。所以有一个元素,但不知何故 razor 不希望我访问它。

这是我的代码。 items2.hijos.first() 也不起作用。

foreach (var item in Model)
{
    <li id="@(item.CNombreManual)" onclick="mostrarEsconderHijos(this.id)" class="list-group-item-heading">@(item.CNombreManual)</li>

    foreach (var item2 in item.hijos)
    {
        <li id="_@(item.cNombreManual)" class="list-group-item" style="tex-align:left; display:none">
        @(item2.CNombreManual)
        @Html.ImageActionLink("Ver PDF", "Descargar", "Manual", new { NombreArchivo = item2.hijos[0].Ruta }, null, "~/imgs/LecturaPdf.png")
        </li>
    }
}

【问题讨论】:

  • 在调试器中设置断点并检查item2.hijos

标签: c# asp.net .net asp.net-mvc razor-pages


【解决方案1】:

在使用数组之前,只需检查您是否有数组 item2.hijos[] 中的项目。它可能会打印前几条记录的值,然后在没有元素的地方抛出错误。所以它可以发生在 item2 的任何 hijos 数组中。只需确保在使用前检查数组大小即可。

item2.hijos[0].Ruta // replace this with the following

item2.hijos.Length > 0? item2.hijos[0].Ruta : 0

我认为你甚至可以做得更短。 item2.hijos[0]?.Ruta ?? 0

【讨论】:

  • 谢谢!这确实解决了问题!我不得不稍微调整一下 cus rut​​a 是字符串。我把它放在这里,所以任何有同样问题的人也可以检查我的编辑####- item2.hijos.Count() > 0? item2.hijos[0].Ruta:"0" -####
  • @SergioHenrySilvaNavarro,很高兴听到这个消息。谢谢。
【解决方案2】:

我不知道您的模型的详细信息,但问题是您正在迭代 (foreach) 项目的 hijos,然后访问项目2 的 hojos。

我想你想访问item2.Ruta:

 foreach (var item2 in item.hijos)
 {
   (...) item2.Ruta // not item2.hijos[0].Ruta

如果你确实需要访问 item2.hijos[0].Ruta 那么你需要先检查它是否存在。

你可以这样做:

您也可以使用item2.hijos.FirstOrDefault()?.Ruta(请参阅Enumerable.FirstOrDefault Method)。

顺便说一句。整个 hijos 也可能为 null,因此可能需要检查整个集合 (item2.hijos) 是否。

最后,您可能希望为item2.hijas 添加另一个foreach,而不是访问元素0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多