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

C#中bool? MyProperty与bool ?MyProperty的语法差异问询

两种可空属性写法的差异解析

哇,这个细节观察得真到位!我刚看到bool ?Selected这种写法的时候也有点惊讶——居然还能这么写?不过先给你吃个定心丸:这两种写法在功能上完全没有差异,编译器会把它们当成一模一样的代码处理。

为什么两者等价?

C#里的bool?其实是Nullable<bool>的语法糖,而编译器在解析代码的时候,会自动忽略类型标识符和属性名之间的空格。也就是说:

  • public bool ?Selected { get; set; }
  • public bool? Selected { get; set; }

这两行代码在语法分析阶段会被编译器统一解析为「类型是Nullable<bool>的属性Selected」。你甚至可以反编译这两种代码生成的IL(中间语言),会发现输出完全一致——连字节码都没区别,功能自然不可能有差异。

那为什么不推荐bool ?Selected这种写法?

虽然语法上合法,但从代码可读性和团队规范的角度来说,bool? Selected是更优的选择:

  • 它更清晰地传递了「bool?是一个完整的可空值类型」的信息,不会让其他开发者第一眼产生困惑(就像你评审时的反应一样)
  • 这是C#社区广泛接受的编码风格,比如微软官方的编码规范就推荐把?紧贴在类型后面

类似的例子还有数组声明:int []arr和int[] arr也是等价的,但后者显然更易读、更符合规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:08:54