可空bool类型:(bool?)null与default(bool?)写法的差异疑问
两种可空布尔值初始化写法的差异分析
这两种初始化匿名对象bar属性的写法没有任何功能上的差异,最终运行效果完全一致。
具体说明:
- 写法一中的
(bool?)null是把null显式转换为bool?类型,确保三元运算符的两个分支返回类型匹配(foo > 0返回的bool会被隐式提升为bool?),当foo无值时,bar会被赋值为可空布尔类型的空值。 - 写法二中的
default(bool?)是获取bool?类型的默认值,而所有可空值类型(Nullable<T>)的默认状态就是HasValue为false,对应的值等价于null。
编译阶段,这两种写法会生成完全相同的IL代码,运行时行为没有任何区别,只是写法风格不同:前者更直观地表达“赋值为null”的意图,后者则是使用C#默认值语法,在需要统一用default处理不同类型默认值的场景下更规范。
内容的提问来源于stack exchange,提问作者Federico
相关产品推荐
相关产品推荐

