为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
一只名叫tom的猫 2018-08-07 07:10:07
请问 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) 有参构造函数。


查看完整回答
反对 回复 2018-08-23
  • 1 回答
  • 0 关注
  • 2228 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信