c# - 验证 if 子句中的空查询

标签 c# linq

我有一个简单的 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/

相关文章:

c# - 开始将 Redis 与 ASP.NET 结合使用

c# - 我如何在 C# 中运行无限循环

c# - 为什么我使用 foreach 与 LINQ .Where() 过滤得到不同的结果?

c# - 计算负数的幂

vb.net - 从列表中获取子列表,并使用 linq 构建平均值

c# - 无法将 'MyClass' 转换为 'MyClass'

c# - 使用Unity进行属性依赖注入(inject)的正确方法

c# - 保存 XML 时强制无 BOM

c# - UWP 应用中的设备 ID(阈值 1)

c# - 任务列表中出现奇怪的空条目