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

C#中if语句使用var做is模式匹配为何可能触发空引用异常?

原因说明

这是C#中is关键字匹配不同模式时的规则差异导致的:

  • 你用到的is Bar bar属于类型模式,该模式只有同时满足「左侧表达式的运行时类型和Bar兼容」、「左侧表达式结果不为null」两个条件时,才会返回true进入if分支。当GetBar()返回null时,匹配直接失败,不会走到调用Baz()的代码,自然不会有空引用异常。
  • 而is var bar属于var模式,该模式的匹配规则是永远返回true,不会做null校验,只会直接把左侧表达式的结果赋值给声明的bar变量。也就是说哪怕GetBar()返回null,也会进入if分支,此时调用bar.Baz()就会触发空引用异常。

如果你想用var模式实现和类型模式一致的空校验效果,需要手动补充非空判断:

if (foo.GetBar() is var bar && bar != null)
{
    bar.Baz();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:57:01