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

C# 中引用类型后缀的问号代表什么含义?

引用类型后加问号的作用

这个语法是C# 8.0版本引入的**可空引用类型(Nullable Reference Types, NRT)**特性,仅在开启可空引用类型检查的上下文下生效(.NET 6及以上版本的项目默认开启该特性),和值类型加问号的含义完全不同,核心作用如下:

  • 显式标记引用类型的可空性
    开启可空引用类型检查后,默认的普通引用类型是不可为空的,加问号?才是主动声明该引用类型允许存储null值。比如string声明的参数不允许传入null,string?声明的参数则明确支持传入null。
  • 触发编译器的空安全静态检查
    • 如果你尝试向未加问号的引用类型参数传入null,编译器会抛出警告/错误,提前规避无意义的空值传入
    • 如果你访问加了问号的可空引用类型的成员,编译器会强制提醒你先做非空判断,从编码阶段降低空引用异常的发生概率
  • 明确API契约
    无需额外注释,调用方通过参数类型就能明确知道这个位置是否允许传空,降低协作、调用三方库时的理解成本。

你提到的OverflowException构造函数的参数写法就是.NET框架适配可空引用类型后的标准实现,明确告知开发者message和innerException两个参数都允许传入null。

注:该语法仅作用于编译期静态检查,运行时层面引用类型本身仍然支持存储null,和C# 8之前的运行时逻辑没有区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:54:03