繁体   English   中英

遍历列表 c# 时索引超出范围异常

[英]Index out of range exception while iterating through list c#

这是我的控制器代码:

    public ActionResult Index(string priceMin, string priceMax)
    {
        lstEventType = HttpRuntime.Cache["EventType"] as List<string>;
        if (lstEventType == null || !lstEventType.Any())
        {
            lstEventType = new List<string>();
            lst = artistModel.fillDropDown();
            lstEventType = lst.Where(p => p.lookupType == "EventType").Select(q => q.lookupValue).ToList();
            HttpRuntime.Cache["EventType"] = lstEventType;
        }
        ViewData["EventType"] = lstEventType;
        artistList = artistModel.displayArtist();    
        if (!String.IsNullOrEmpty(priceMin))
        {
            aSession.priceMin = priceMin;
            ViewData["priceMin"] = priceMin;
            artistList = artistList.Where(p => (string.IsNullOrEmpty(p.strHiddenCost) ? 0 : Convert.ToInt32(p.strHiddenCost)) >= Convert.ToInt32(priceMin)).ToList();
        }
        if (!String.IsNullOrEmpty(priceMax))
        {
            aSession.priceMax = priceMax;
            ViewData["priceMax"] = priceMax;
            artistList = artistList.Where(p => (string.IsNullOrEmpty(p.strHiddenCost) ? 0 : Convert.ToInt32(p.strHiddenCost)) <= Convert.ToInt32(priceMax)).ToList();
        }         
        return View(artistList);
    }

如果此 ArtistList 返回非值,则我不会收到任何错误。 但是,如果 ArtistList 返回 null,则视图中的以下代码部分将引发异常。 我无法弄清楚这个艺术家列表如何影响 viewdata["EventType"]。

下面是我的代码

@{
   List<string> EventTypes = ViewData["EventType"] as List<string>;
        foreach (string eventType in EventTypes)
          {    
            <li><a> <span class="pull-right"></span>@eventType</a></li>
          }
   }

在迭代这个循环时,我得到索引超出范围异常。 如果我的控制器向这个视图返回一个非空列表,那么它工作正常。 但是如果控制器返回空列表以查看此迭代失败。

变量命名很重要,尝试使用 EventTypeList 而不是 EventTypes。 此外,由于您使用的是 foreach,您应该使用空检查。

@{
    List<string> EventTypeList= ViewData["EventType"] as List<string>;
    if (EventTypeList != null && EventTypeList.Count > 0){
        foreach (string eventType in EventTypeList)
        {
            <li><a> <span class="pull-right">@eventType</span></a></li>
        }
    }
}

添加的 nullcheck 将解决您在控制器发送空列表时发生的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM