You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linq查询空引用异常:if子句验证Null查询未执行else分支

解决Linq查询返回null时的空引用异常问题

嘿,我一眼就看出问题出在哪了!你现在的代码里,当FirstOrDefault()返回null的时候,你直接去访问incidenciaPronosticada.IdIncidenciaPronosticada——这就像你想打开一扇根本不存在的门,程序当然会抛出空引用异常,连if...else判断的机会都没有就直接挂了。

问题根源

你的if条件里先去访问了null对象的属性,这是致命错误。而且原来的条件逻辑也有问题:如果IdIncidenciaPronosticada是值类型(比如int),那它不可能为null,!= null的判断完全多余;同时||逻辑或会导致只要其中一个条件成立就进入if分支,这大概率不是你想要的逻辑。

正确的解决方案

我们需要先判断对象是否存在,再去检查它的属性,这里给你两种常用的写法:

写法1:显式判断对象非null

var incidenciaPronosticada = _c.IncidenciaPronosticadas
    .Where(x => x.IdIncidenciaPronosticada == item.IdIncidenciaPronosticada)
    .FirstOrDefault();

// 先确保对象不为null,再判断ID是否有效
if (incidenciaPronosticada != null && incidenciaPronosticada.IdIncidenciaPronosticada != 0)
{
    // 找到有效记录时执行的代码
}
else
{
    // 未找到记录,或记录ID无效时执行的代码
}

写法2:使用空条件运算符(C# 6.0+)

用?.运算符可以更简洁地处理空对象,它会在对象为null时直接返回null(值类型会转为可空类型),避免空引用:

var incidenciaPronosticada = _c.IncidenciaPronosticadas
    .Where(x => x.IdIncidenciaPronosticada == item.IdIncidenciaPronosticada)
    .FirstOrDefault();

// 如果对象为null,incidenciaPronosticada?.IdIncidenciaPronosticada会返回null,和0比较结果为false
if (incidenciaPronosticada?.IdIncidenciaPronosticada != 0)
{
    // 有效记录逻辑
}
else
{
    // 空对象或ID为0的逻辑
}

额外优化建议

如果你只是想根据ID查找记录,其实可以把Where和FirstOrDefault合并成一步,代码更简洁:

var incidenciaPronosticada = _c.IncidenciaPronosticadas
    .FirstOrDefault(x => x.IdIncidenciaPronosticada == item.IdIncidenciaPronosticada);

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:52:49