我有一系列的东西。 list.Count > 0
和list.Count != 0
之间有什么区别吗?或者这些代码中的任何性能差异?
if (list.Count > 0)
// do some stuff
if (list.Count != 0)
// do some stuff
注意:
list.Count
不能小于ziro ..
答案 0 :(得分:3)
正如大家所解释的那样,功能上list.Count != 0
和list.Count > 0
之间没有区别,因为list.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
时间>&gt; :0
Any()的时间:10
答案 1 :(得分:2)
list.Count > 0
和list.Count != 0
之间有什么区别吗?
是。第一个评估list.Count
是否大于0
。第二个评估它是否不等于0
。 &#34;大于&#34;并且&#34;不等于&#34;是不同的事情。
答案 2 :(得分:1)
我想在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
(比较)命令的最原子命令。
总之,我们可以说这些比较命令之间没有显着的性能差异
祝你好运
答案 3 :(得分:0)
在这种特殊情况下,两者之间没有典型的区别 这两个。但
!=
和>0
完全不同。>0
仅执行 当count(条件表达式)大于0时其中!=
执行时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
}
答案 4 :(得分:0)
我想如果ICollection.Count是uint
的类型,你就不会有这样的问题。在Why does .NET use int instead of uint in certain classes?查看ICollection.Count为int
的原因。
从可读性的角度来看,list.Count != 0
会导致考虑Count
是否为负数。所以我更喜欢list.Count > 0
personaly。