【问题标题】:checking if a viewbag list is null or empty检查 viewbag 列表是否为空或为空
【发布时间】:2021-06-05 01:40:25
【问题描述】:

我无法检查我的列表长度是否为 0。如果我删除 or 的第二部分,则代码有效。只检查列表是否为空。

@{
    @if( ViewBag.somelist != null || Enumerable.Count(ViewBag.somelist) == 0)
    {
        <p>list not null or empty</p>
    }
    @else
    {
        <p>list is empty</p>
    }
}

我尝试过的:

  • Enumerable.Count(ViewBag.somelist)
  • ViewBag.somelist.Count() == 0
var somelist=Viewbag.somelist.Count;
@if( ViewBag.bbM9and10 != null || somelist == 0){}

还有用于检查列表是否为空的可互换项: >=0, =1

【问题讨论】:

  • 那只是检查列表是否为空。我的代码已经做到了。我还想检查我的列表的长度是否等于零
  • 应该不检查list != null 还是list count大于0,不等于0
  • 或者是 if(Not Null AND Count > 0)
  • 我的 viewbag 是在我的代码中的某处创建的。它并不总是存在。这就是我检查它是否为空的原因。然而,一旦它被创建。如果删除了足够的索引以使列表长度为零,我想检查列表是否为空

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


【解决方案1】:

您应该可以在这里只使用Any(),将您的|| 替换为cmets 中提到的&amp;&amp;,因为您正在检查列表是否不为空非空:

@{
    @if(ViewBag.somelist != null && ViewBag.somelist.Any())
    {
        <p>list not null or empty</p>
    }
    @else
    {
        <p>list is empty</p>
    }
}

您可以安全地调用它,因为如果 somelist 为 null,则执行将永远不会到达该点。

【讨论】:

    【解决方案2】:

    您的代码的问题是 || 运算符。对于 || 运算符,当第一条语句为真或假时,将始终执行第二条语句。在您的情况下,如果 ViewBag.somelist 为 null,则第二条语句也将被执行,然后将抛出 ArgumentNullException。为了克服这个问题,使用 && 代替 ||。它将充当短路,当第一个语句为真时,只有第二个语句才会执行,否则执行将移至下一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      相关资源
      最近更新 更多