我有一个简单的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
为空时它不执行else
子句,它只是停止
incidenciaPronosticada.IdIncidenciaPronosticada = 'incidenciaPronosticada.IdIncidenciaPronosticada'引发了一个例外 类型为'System.NullReferenceException'
为何不阅读incidenciaPronosticada.IdIncidenciaPronosticada != null
?如果调试器读取它应该传递给else子句no?或者我做错了什么?此致
答案 0 :(得分:4)
incidenciaPronosticada
本身可以为空,这意味着incidenciaPronosticada.IdIncidenciaPronosticada != 0
会导致NullReferenceExecption
,因为无法访问IdIncidenciaPronosticada
。
执行显式空检查或使用空安全导航操作符?.
:
if( incidenciaPronosticada != null && incidenciaPronosticada.IdIncidenciaPronosticada != 0 ) {
或:
if( incidenciaPronosticada?.IdIncidenciaPronosticada > 0 ) {
(注意我使用的是> 0
而不是!= 0
,因为如果> 0
为空(true
),incidenciaPronosticada
将为(Int32?)null != (Int32?)0
:< / p>
另请注意,incidenciaPronosticada?.IdIncidenciaPronosticada
表达式的类型为Nullable<Int32>
(又名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
答案 1 :(得分:1)
您正在尝试访问incidenciaPronosticada内的成员。您的空检查应该类似于
if(incidenciaPronosticada != null)
{
//code there
}
else {
//code there
}