【问题标题】:Which is better when check a list is null : not null or use Any检查列表是否为空时哪个更好:不为空或使用任何
【发布时间】:2023-04-06 21:10:02
【问题描述】:

检查列表为空时哪个更好?

var newList;

if(newList!= null)

or newList.Any()

在上面的代码中,有时我检查not null,有时我使用Any(),我不知道哪个是最佳实践,为什么?

有什么建议吗?

提前致谢

【问题讨论】:

  • 最佳实践是不要在代码中留下错误。如果newList 实际上是nullAny() 将抛出 Null 异常
  • 如果nesListnull,则不能使用newList.Any()
  • 我不明白为什么这些天这类问题会得到点赞,甚至得到点赞。

标签: c# list


【解决方案1】:

这些不一样。

如果在null 引用上使用Any 将引发异常。

使用列表,您可以将.Any() 视为.Count() != 0 (*)

您可能必须同时检查两者,并且必须在调用 Any() 之前对您的 IEnumerable 进行空值检查。

一种方法是使用 null 安全导航 ?.Thierry V's answer 一样在一次打击中检查它们。

但有时如果你有一个不应该有的空值,你想抛出一个自定义异常,并将一个空列表视为正确的输入,所以这一切都取决于上下文。

请记住这些是不同的。

(*) :正如评论中所注意到的,.Any() 实际上并未实现为Count() == 0。对于列表,它在功能上是等效的,但最好使用Any() 来测试IEnumerable 是否为空,因为Count() 可能需要遍历所有元素。

【讨论】:

  • 一般来说,对于不是Lists 的序列,Count() != 0Any() 不同,因为它在比较之前滚动整个序列来计算项目数(可能是无限的!)它使用 0。相反,Any() 在找到项目或序列为空时立即返回。
  • @LucaCremonesi 确实如此。感谢您的评论。为了正确起见,我试图在答案中阐述这一点。如果您想看到更好的措辞,请随意编辑。
【解决方案2】:

nullAny() 有不同的用途。

Any 用于检查您的列表是否包含任何项目。

在调用Any之前,你的列表必须不是null,不是,它会抛出Null异常。

想想newList?.Any()

【讨论】:

    【解决方案3】:

    正如其他答案所说,!= nullAny() 不同

    我会写一个扩展方法让你期待。

    public static class ExtenstionArray
    {
        public static bool CheckAny<T>(this IEnumerable<T> list) {
            return list != null && list.Any();
        }
    }
    

    那么你可以使用更方便的检查。

    if(newList.CheckAny())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2023-03-30
      • 2010-09-07
      • 1970-01-01
      相关资源
      最近更新 更多