记录一个两年前发生的一个问题

事情是这个样子的,两年前工作中我写下了如下的代码

//此处是从服务器获取一个List
List<string> list=new List<string>();
if (list != null || list.Count > 0)
{
       //做了一些事情
}

本来我认为这个是很正确的写法,但是一个同事当场质疑我说不能这么写,我当时是满脑袋问好????

不能这么写?我从学C#的时候我就一直这么写,从没见过出问题。直到他们给我解释了原因我才知道咋回事。

具体应该这样写

 //此处是从服务器获取一个List
List<string> list = new List<string>();
if (list != null)
{
    if (list.Count > 0)
    {
       //做了一些事情
    }
}

原来,有一部分老的编译器会执行检查list==null后仍然会执行||后边的代码,也就是当list==null的时候仍然会执行list.Count>0。此处很明显就会报空指针异常了。

当然这是有些极少数的老的编译器才会这么干,现如今的编译器两种写法都没问题。

谨以此片文章记录这个不算错误的错误。

原文地址:https://www.cnblogs.com/Schme/p/13975401.html