.net 想用值传递的写法省事儿的坑(if嵌套对象?.属性)
之前看别人写的代码中有例如如下代码
重点在于if语句中的问号,这个问号大概意思比较容易理解,就是说q有可能为空,如果为空的话 点count的时候会报错。
加上问号的话叫值传递,或者说如果q为空时这个表达式中断了直接返回null。
但是有一个问题一直没怎么弄明白:就是null和int类型和bool类型这种值类型的能比较吗?试验了一下是可以的。
也就是上述的if 语句中如果q为null 那么就相当于 if(null>0)返回的是false。
那么这里就要注意一点,如果业务需求是要实现:
那么就不能写成如下的写法
这里有个逻辑上经常犯的错误,至少我接收的这些代码中有些是这样写的,就是判断如果查询不到数据返回一提示,但是上面这种写法当q为null时这个if判断就是false,不会只想返回的提示了。
总结一下:
if (q!=null && q.Count() > 0) 可以写成 if (q?.Count() > 0)
if(q==null || q.count()==0) 不可以写成 if(q?.count()==0)
所以要注意,省事的写法还是要切实的跟业务逻辑相关,不是想省就省的。
这种稍不注意写到代码在程序里面就是一个隐患,就像一艘军舰里面有个漏水的针眼,还真不容易发现。

浙公网安备 33010602011771号