3

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

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

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

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

有没有什么情况List<T>.Count是负面的?

4

4 回答 4

5

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

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

}

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

是否存在 List.Count 为负数的情况?

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

于 2016-04-13T10:19:35.707 回答
1

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

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

  • 如果您使用的是列表,请使用 Count,因为它知道它的大小。
  • 使用数组的长度
  • 如果你只有一个 IEnumerable 我会使用 .Any() 而不是 .Count() 因为它会在检查一个项目后停止,所以它会更快。

Ref - List<T> 任何或计数?

于 2016-04-13T10:30:17.373 回答
1

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

与. _ Length <= 0_LengthLength == 0

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

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

于 2016-04-13T11:48:29.593 回答
0

Null-Conditional Operator 即使是最新的 .NET 开发人员也可能熟悉 NullReferenceException。这是一个异常,几乎总是表明存在错误,因为开发人员在调用(null)对象上的成员之前没有执行足够的 null 检查。

if(someList?.Any()){
 //Something
}
于 2018-10-02T18:35:41.733 回答