为了账号安全,请及时绑定邮箱和手机立即绑定

验证if子句中的空查询

验证if子句中的空查询

C#
跃然一笑 2021-05-07 14:12:12
我有一个简单的Linq查询,并且if...else条件类似:var incidenciaPronosticada = _c.IncidenciaPronosticadas    .Where( x => x.IdIncidenciaPronosticada == item.IdIncidenciaPronosticada )    .FirstOrDefault();if( incidenciaPronosticada.IdIncidenciaPronosticada != 0 || incidenciaPronosticada.IdIncidenciaPronosticada != null ){    //code there}else {    //code there}问题是当incidenciaPronosticada它为null时不执行else子句,它只是停止incidenciaPronosticada.IdIncidenciaPronosticada ='incidenciaPronosticada.IdIncidenciaPronosticada'引发了类型'System.NullReferenceException'的异常为什么不读incidenciaPronosticada.IdIncidenciaPronosticada != null?如果调试器读取了它,它应该传递给else子句否?还是我做错了什么?问候
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

incidenciaPronosticada本身可以为null,这incidenciaPronosticada.IdIncidenciaPronosticada != 0将导致aNullReferenceExecption因为IdIncidenciaPronosticada无法访问。


执行显式的null检查或使用null安全导航操作符?.:


if( incidenciaPronosticada != null && incidenciaPronosticada.IdIncidenciaPronosticada != 0 ) {

或者:


if( incidenciaPronosticada?.IdIncidenciaPronosticada > 0 ) {

(请注意我用的> 0,而不是!= 0因为> 0会true如果incidenciaPronosticada是空的(因为(Int32?)null != (Int32?)0):


还要注意,incidenciaPronosticada?.IdIncidenciaPronosticada表达式的类型是Nullable<Int32>(aka Int32?)而不是Int32。


这是下表的结果 if( incidenciaPronosticada.IdIncidenciaPronosticada ... )


incidenciaPronosticada      IdIncidenciaPronosticada    . != 0    . > 0

null                        null                        throws    throws

(object)                    null                        true      false

(object)                    0                           false     false

(object)                    1                           true      true

这是下表的结果 if( incidenciaPronosticada?.IdIncidenciaPronosticada ... )


incidenciaPronosticada      IdIncidenciaPronosticada    ?. != 0   ?. > 0

null                        null                        true      false

(object)                    null                        true      false

(object)                    0                           false     false

(object)                    1                           true      true


查看完整回答
反对 回复 2021-05-21
?
FFIVE

TA贡献1797条经验 获得超6个赞

您正在尝试访问incidenciaPronosticada内部的成员。空支票应该看起来像


if(incidenciaPronosticada != null)

{

//code there

}

else {

//code there

}


查看完整回答
反对 回复 2021-05-21
  • 2 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信