我有一个简单的 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' threw an exception of type 'System.NullReferenceException'
为什么它不读取 incidenciaPronosticada.IdIncidenciaPronosticada != null
?如果调试器读取它,它应该传递给 else 子句吗?或者我做错了什么?问候
最佳答案
incidenciaPronosticada
本身可以为 null,这意味着 incidenciaPronosticada.IdIncidenciaPronosticada != 0
会导致 NullReferenceExecption
因为IdIncidenciaPronosticada
无法访问。
要么执行显式空检查,要么使用空安全导航运算符 ?.
:
if( incidenciaPronosticada != null && incidenciaPronosticada.IdIncidenciaPronosticada != 0 ) {
或:
if( incidenciaPronosticada?.IdIncidenciaPronosticada > 0 ) {
(请注意,我使用 > 0
而不是 != 0
,因为如果 > 0
为空(因为 true
),incidenciaPronosticada
将是 (Int32?)null != (Int32?)0
:
还要注意 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
关于c# - 验证 if 子句中的空查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50107090/