[英]Difference between list.Count > 0 and list.Count != 0
我有事情清单。 list.Count > 0
和list.Count != 0
之间有什么区别吗? 还是这些代码的性能差异?
if (list.Count > 0)
// do some stuff
if (list.Count != 0)
// do some stuff
注意:
list.Count
不能小于list.Count
..
实际上,这没有什么区别,因为列表永远不会少于0个项目,但是用于整数比较的==
非常快,因此它可能比>
快。 看起来更酷的方法是list.Any()
。
(这是通过列表假设的,您是指列表类型或任何内置的IEnumerable / Collection)
正如大家所解释的那样, list.Count != 0
和list.Count > 0
作为list.Count在功能上没有区别.Count不能小于0。
我做了一个快速测试,它显示!= 0
和> 0
几乎都一样快(而且非常快)。 Linq的list.Any()
那么快!
这是测试代码(比较100000次以放大差异)
static List<object> GetBigObjectList()
{
var list = new List<object>();
for (int i = 0; i < 10000; i++)
{
list.Add(new object());
}
return list;
}
static void Main(string[] args)
{
var myList = GetBigObjectList();
var s1 = new Stopwatch();
var s2 = new Stopwatch();
var s3 = new Stopwatch();
s1.Start();
for (int i = 0; i < 100000; i++)
{
var isNotEqual = myList.Count != 0;
}
s1.Stop();
s2.Start();
for (int i = 0; i < 100000; i++)
{
var isGreaterThan = myList.Count > 0;
}
s2.Stop();
s3.Start();
for (int i = 0; i < 100000; i++)
{
var isAny = myList.Any();
}
s3.Stop();
Console.WriteLine("Time taken by != : " + s1.ElapsedMilliseconds);
Console.WriteLine("Time taken by > : " + s2.ElapsedMilliseconds);
Console.WriteLine("Time taken by Any() : " + s3.ElapsedMilliseconds);
Console.ReadLine();
}
它显示:
!=花费的时间:0
花费的时间:: 0
Any()花费的时间:10
list.Count > 0
和list.Count != 0
之间有什么区别吗?
是。 第一个评估list.Count
是否大于0
。 第二个评估它是否不等于0
。 “大于”和“不等于”是不同的东西。
我猜在CPU寄存器级别上,用于比较两个数字的汇编命令将逐位检查这些数字,并将激活一些条件标志以跳转到指定的行。 例如:
cmp BL, BH ; BL and BH are cpu registers
je EQUAL_Label ; BL = BH
jg GREATER_Label ; BL > BH
jmp LESS_Label ; BL < BH
如您所见, je
, jg
或jmp
命令几乎是最原子的命令,可能在以前的cmp
(比较)命令上起作用。 总之,我们可以说这些比较命令之间没有显着的性能差异。
祝好运
在这种特定情况下,两者之间没有典型的区别。 但是
!=
和>0
完全不同。>0
仅在count(条件表达式)大于0时执行,其中as!=
当count(条件表达式)大于0
且小于0
if (list.Count > 0)
{
// Execute only when the count greater than 0
}
if (list.Count != 0)
{
// Execute only when the count not equal to 0
}
我想如果ICollection.Count是uint
类型,您将不会遇到这样的问题。 请参阅“为什么ICollection.Count是int
, 在某些类中,.NET为什么使用int而不是uint? 。
从可读性的角度来看, list.Count != 0
将导致思考Count
是否可以为负数。 所以我更喜欢list.Count > 0
personaly。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.