迭代列表c#时索引超出范围异常

时间:2015-08-29 17:40:45

标签: c# list asp.net-mvc-4 foreach controller

这是我的控制器代码:

    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,则视图中的下面部分代码抛出异常。我无法弄清楚这个artistList如何影响viewdata [&#34; EventType&#34;]。

以下是我在视图中的代码

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

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

1 个答案:

答案 0 :(得分:0)

变量命名很重要,请尝试使用EventTypeList而不是EventTypes。 此外,由于您使用的是foreach,因此应使用nullcheck。

@{
    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将修复控制器发送空列表时发生的问题。