我在许多代码段中看到以下条件用于检查列表是否为空:
List<string> someList = someFunctionThatPopulatesAList();
if (someList == null || someList.Count <= 0)
return;
我想知道 - 为什么不使用以下条件:
if (someList == null || someList.Count == 0)
return;
是否存在List<T>.Count
为负面的情况?
答案 0 :(得分:5)
你可以简单地尝试使用Any(),如
if ((someList!= null) && (!someList.Any())) {
}
请注意,如果列表使用IEnumerable<T>
并且您想使用LINQ选项,则可以使用它。
是否存在List.Count为负数的情况?
不,不是。实际上,无论何时使用Count
或length
等操作,都会返回一个带符号的整数,因此更像是一个实现来检查您是否正在实现它以检查它是否为正结果。(< em>然而,从技术上来说,你不需要进行检查。它更像是一个想法实现。)
答案 1 :(得分:1)
是的,你是对的,没有必要使用它。
您也可以使用@Rahul建议的Any()
扩展方法。
但是因为您正在检查List<T>
是否建议使用Count()
,所以它会稍微快一点,因为已知大小。
- 如果您正在使用列表,请使用Count,因为它知道它的大小。
- 使用数组长度
- 如果你只有一个IEnumerable,我会使用.Any()而不是.Count(),因为它会更快,因为它会在检查一个项目后停止。
答案 2 :(得分:0)
正如其他人所说:使用Any()
是一个很好的解决方案。
与Length <= 0
相比,使用Length
时使用Length == 0
的原因有两个独立的方面。
重用代码更安全。代码可以更改为使用除标准.net List&lt;&gt;之外的其他一些列表类。实现和其他列表类在某些情况下可以返回Length()的负值。在我看来,创建这样一个课程是一个非常糟糕的主意,但有时候人们会选择关注不好的想法,所以更安全而不是抱歉。
使用代码分析工具时,这将允许代码分析工具知道Length
具有正值,并且可以提高工具对代码进行有意义分析的能力。
答案 3 :(得分:0)
空条件运算符 即使是最新的.NET开发人员也可能熟悉NullReferenceException。这是一个例外,几乎总是表明存在错误,因为开发人员在调用(null)对象上的成员之前未执行足够的null检查。
if(someList?.Any()){
//Something
}