【问题标题】:c# check IEnumerable for null [duplicate]c# 检查 IEnumerable 是否为 null [重复]
【发布时间】:2017-04-21 19:32:53
【问题描述】:

我正在尝试检查 IEnuemrable<SystemUser> 的类型是否为空。

我正在使用这段代码

            var systemUsers = newActActivityPersons.SelectMany(x => x.Person.SystemUsers);
            if (systemUsers == null || !systemUsers.Any()) return ;

这是行不通的。当我尝试执行systemUsers.ToArray()systemUsers.ToList() 之类的操作时,我得到一个空异常。我怎样才能检查这是否有错误?

【问题讨论】:

  • 不是systemUsers 为空。调试器说什么?
  • 您的检查没有问题。也许 newActActivityPersons 为空。
  • SelectMany 不返回 null,因此无论如何检查都是多余的。如果systemUsers.ToList() 正在抛出一个 NRE,它会在之后被清空。发布一个更大的块,显示在此处和您获得异常的位置之间发生的事情。
  • Duplicate 展示了如何做你所问的。请注意,您的帖子可能与您遇到的问题无关,@SaebAmini 的评论可能是解释。如果您仍有问题,请随时通过minimal reproducible example 提出新问题。
  • systemUsers 不为空,因此 systemUsers.Any() 未执行,因此在尝试枚举后会出现异常,因为在尝试访问 .SystemUsers 之前 x.Person 返回了一个空值

标签: c# ienumerable


【解决方案1】:

随后的x.Person.SystemUsers 之一可能为空。 .Any() 如果有,则返回 true。如果您之后尝试ToList(),您可能会发现xPerson 为空。

在访问对象的属性之前检查以确保x.Person 不为空。

【讨论】:

  • 谢谢,这很有道理。它解决了问题。
猜你喜欢
  • 2014-03-24
  • 2013-08-04
  • 1970-01-01
  • 2016-12-28
  • 2011-06-30
  • 2021-01-08
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
相关资源
最近更新 更多