首页 新闻 会员 周边 捐助

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

1
悬赏园豆:100 [已解决问题] 解决于 2018-01-09 13:18

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

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

Cannot implicitly convert type 'bool?' to 'bool'
C#
dudu的主页 dudu | 高人七级 | 园豆:30778
提问于:2017-11-15 13:51
< >
分享
最佳答案
1

闲来无事答一答题。

答案如下:

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) 有参构造函数。

 

收获园豆:50
Echofool | 初学一级 |园豆:175 | 2018-01-09 12:57

这样写行不行?

bool result=isOK.HasValue?(bool)isOK:false;
沐见南 | 园豆:202 (菜鸟二级) | 2019-06-20 22:30
其他回答(6)
3

if(isOk ?? false)

收获园豆:30
吴瑞祥 | 园豆:29449 (高人七级) | 2017-11-15 13:54
8

if(isOk.HasValue && isOk.Value)

收获园豆:20
Daniel Cai | 园豆:10424 (专家六级) | 2017-11-15 13:56
0

参考:https://stackoverflow.com/questions/22680391/cannot-implicitly-convert-type-bool-to-bool-an-explicit-conversion-exists

金琥 | 园豆:2605 (老鸟四级) | 2017-11-15 14:16
0

笨方法

bool? IsBool;
if (IsBool!=null)
{
xxxxxxxx;
}

 

猝不及防 | 园豆:2878 (老鸟四级) | 2017-11-15 14:41
0

if(isOk.HasValue|isOk.Value)

张林-布莱恩特 | 园豆:108 (初学一级) | 2017-11-15 22:58
0

 bool? isOk; if (isOk) 这边可能为空

 bool isOK ;if(isOk) 应该没问题

华临天下 | 园豆:1501 (小虾三级) | 2017-11-16 16:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册