无法检查数组是否为空

时间:2012-12-23 21:48:37

标签: c# asp.net-mvc asp.net-mvc-3

我的asp.net mvc应用程序中有folloiwng动作方法: -

 public ActionResult CustomersDetails(long[] SelectRight)
        {

            if (SelectRight == null)
            {
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
                RedirectToAction("Index");
            }
            else
            {
                var selectedCustomers = new SelectedCustomers
                {
                    Info = SelectRight.Select(GetAccount)
                };




                return View(selectedCustomers);
            }
            return View();
        }

但是如果SelectRight Array为空,那么它将绕过if (SelectRight == null)检查,它将呈现CustomerDetails视图并在视图中的以下代码上引发异常

@foreach (var item in Model.Info) {
    <tr>

那么如何才能使空检查工作正常?

3 个答案:

答案 0 :(得分:7)

您必须返回 RedirectToAction(..)的结果。

 public ActionResult CustomersDetails(long[] SelectRight)
 {
      if (SelectRight == null)
      {
           ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
           return RedirectToAction("Index");
      }
      else
      {
           '...

答案 1 :(得分:6)

您可以将条件更改为以下条件:

...
if (SelectRight == null || SelectRight.Length == 0)
...

这应该有所帮助。

修改

关于上面代码的重要注意事项是,在c#中,或者运算符||是短路的。它看到数组为null(语句为true)并且不会尝试计算第二个语句(SelectRight.Length == 0),因此不会抛出NPE。

答案 2 :(得分:4)

您可以检查它是否为空,并且长度不为零。

if (SelectRight == null || SelectRight.Length == 0) {
    ModelState.AddModelError("", "Unable to save changes...");
    return RedirectToAction("Index");
}

上面的if语句会捕获空值和空数组。