请问 C# 中判断可空布尔类型变量值的正确姿势是什么?如果直接判断( bool? isOk; if (isOk) ; )会出现下面的错误提示:Cannot implicitly convert type 'bool?' to 'bool'
1 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
bool? success = null;if(success.GetValueOrDefault()){ //TODO: do what you want.}
原因:其实翻看 Nullable<T> 的源码就应该知道,T 的约束是 struct(其实这应该算常识),对应的当类型为 Nullable<T> 的变量被“赋值”为null时, GetValueOrDefault() 返回的值实际上 等于 default(T) ,原因是 bool? success = null; 实际上对应的代码是 bool? success = new Nullable<bool>();//所有结构都有一个默认无参数的构造函数。 (编译器的功劳哦)。
当 bool? success = 后面跟的是一个编译时无法确定是否为 null 的表达式时,编译器会生成一个 if else 语句,判断表达式运行的值,如果为 null 跟上面的一样,调用默认无参数的构造函数,如果不为 null,则调用 public Nullable(T value) 有参构造函数。
- 1 回答
- 0 关注
- 2228 浏览
添加回答
举报
0/150
提交
取消