为什么检查 List<T>.Count <= 0?

Why check whether List<T>.Count <= 0?

我在很多代码片段中看到,以下条件用于检查列表是否为空:

List<string> someList = someFunctionThatPopulatesAList();
if (someList == null || someList.Count <= 0)
    return;

我想知道 - 为什么不使用以下条件:

if (someList == null || someList.Count == 0)
    return;

有没有List<T>.Count为负的情况?

您可以简单地尝试使用 Any() 之类的

if ((someList!= null) && (!someList.Any())) {

}

请注意,如果列表使用 IEnumerable<T> 并且您想使用 LINQ 选项,则可以使用它。

Is there any case in which List.Count is negative?

不,不是。实际上,每当您使用 Countlength 之类的操作时,都会返回一个带符号的整数,因此它更像是一种检查您是否正在实施它以检查它是否为正结果的实现。(但是从技术上讲,您不需要进行该检查。它更像是一个想法实现。)

是的,你是对的,没有必要使用那个。

您也可以使用@Rahul 建议的 Any() 扩展方法。 但是因为您正在检查 List<T> 是否建议使用 Count(),它会稍微快一些,因为大小已经知道。

  • Use Count if you're using a list, since it knows it's size.
  • Use Length for an Array
  • If you just have an IEnumerable I would use .Any() over .Count() as it will be faster since it stops after checking one item.

Ref - List<T> Any or Count?

正如其他人所说:使用 Any() 是一个很好的解决方案。

Length == 0 相比,在使用 Length 时使用 Length <= 0

更好的原因有两个不同的方面
  1. 重用代码更安全。代码可以更改为使用标准 .net List<> 实现以外的其他一些列表 class,并且在某些情况下,其他列表 class 可能 return 为 Length() 的负值。在我看来,创建这样一个 class 将是一个非常糟糕的主意,但有时人们会选择遵循糟糕的想法,所以安全总比后悔好。

  2. 在使用代码分析工具时,这将使代码分析工具知道 Length 具有正值,并且可以提高该工具对您的代码进行有意义分析的能力代码.

空条件运算符 即使是最新的 .NET 开发人员也可能熟悉 NullReferenceException。这是一个几乎总是表示错误的异常,因为开发人员在调用(空)对象上的成员之前没有执行足够的空检查。

if(someList?.Any()){
 //Something
}