繁体   English   中英

list.Count> 0和list.Count!= 0之间的差异

[英]Difference between list.Count > 0 and list.Count != 0

我有事情清单。 list.Count > 0list.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 != 0list.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 > 0list.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

如您所见, jejgjmp命令几乎是最原子的命令,可能在以前的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM