C# 中判断 bool? 是否为 true 的正确姿势

请问 C# 中判断可空布尔类型变量值的正确姿势是什么?

如果直接判断( bool? isOk; if (isOk) ; )会出现下面的错误提示:

Cannot implicitly convert type 'bool?' to 'bool'


一只名叫tom的猫
浏览 2229回答 1
1回答

暮色呼如

bool?&nbsp;success&nbsp;=&nbsp;null;if(success.GetValueOrDefault()){&nbsp;&nbsp;&nbsp;&nbsp;//TODO:&nbsp;do&nbsp;what&nbsp;you&nbsp;want.}原因:其实翻看&nbsp;&nbsp;Nullable<T>&nbsp;的源码就应该知道,T 的约束是 struct(其实这应该算常识),对应的当类型为&nbsp;Nullable<T>&nbsp;的变量被“赋值”为null时,&nbsp;GetValueOrDefault()&nbsp;返回的值实际上 等于 &nbsp;default(T)&nbsp;,原因是&nbsp;&nbsp;bool? success =&nbsp;null;&nbsp;实际上对应的代码是&nbsp;&nbsp;bool? success =&nbsp;new&nbsp;Nullable<bool>();//所有结构都有一个默认无参数的构造函数。&nbsp;(编译器的功劳哦)。当&nbsp;&nbsp;bool? success =&nbsp;&nbsp;后面跟的是一个编译时无法确定是否为&nbsp;&nbsp;null&nbsp;的表达式时,编译器会生成一个 if else 语句,判断表达式运行的值,如果为 null 跟上面的一样,调用默认无参数的构造函数,如果不为 null,则调用 &nbsp;public&nbsp;Nullable(T value)&nbsp;有参构造函数。
打开App,查看更多内容
随时随地看视频慕课网APP