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

C#中?.运算符与!运算符的区别是什么?

C# 中 ?. 和 ! 运算符的区别

结合Prop1是int类型的前提,两段代码的核心区别如下:

第一段代码:var c = foo?.Prop1;

  • 这是空条件运算符,核心作用是安全防null:
    • 运行时会先检查foo是否为null:如果foo不为null,就正常获取Prop1的int值;如果foo是null,整个表达式直接返回null。
    • 因为Prop1是值类型int,变量c的类型会被自动推导为int?(可空int类型),允许存储null值。
    • 无论foo是否为null,这段代码都不会抛出NullReferenceException。

第二段代码:var c = foo!.Prop1;

  • 这是空包容运算符,核心作用是给编译器“打保票”:
    • 它完全不做运行时的null检查,仅告诉编译器:“我确认foo绝对不是null,不用给我报null相关警告”。
    • 变量c的类型会被推导为普通的int,因为编译器被强制认定foo非空,直接取Prop1的int值。
    • 如果运行时foo实际为null,这段代码会直接抛出NullReferenceException,因为没有任何安全校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:55:16