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

C#中变量为null却无法进入else块,NullReferenceException问题求助

解决C#中FirstOrDefault返回null时的空引用异常问题

你的问题根源很明确:当Database.defaultCard为空或没有匹配x.Line == "DONE"的元素时,FirstOrDefault返回null,但你紧接着直接访问.Line属性,这一步就会触发NullReferenceException,代码根本走不到后续的if-else判断,自然进不了else分支。

修复方案

方案1:先获取对象再判断

先把FirstOrDefault的结果存下来,确认不为null后再访问属性:

var targetCard = Database.defaultCard.FirstOrDefault(x => x.Line == "DONE");
string done;

if (targetCard != null)
{
    done = targetCard.Line;
    ListingProgressNotNull(done);
}
else
{
    done = "DONE";
    ListingProgressNull(done);
}

方案2:使用空条件运算符(C# 6+)

用?.空条件运算符简化代码,它会在对象为null时直接返回null,避免抛出异常:

string done = Database.defaultCard.FirstOrDefault(x => x.Line == "DONE")?.Line;

if (done != null)
{
    ListingProgressNotNull(done);
}
else
{
    done = "DONE";
    ListingProgressNull(done);
}

关键知识点

  • FirstOrDefault的行为:对于引用类型,当序列为空或无匹配元素时返回null;值类型则返回对应类型的默认值(如int返回0)。
  • 空引用异常的触发条件:尝试访问null对象的成员(属性、方法、字段等)时必然抛出该异常,所以必须先校验对象是否为null。
  • 空条件运算符?.:C# 6引入的语法糖,能安全访问可能为null的对象成员,对象为null时整个表达式直接返回null,不会抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:01:42