日期:2014-05-16  浏览次数:20902 次

有一行代码,关于bool?方面的,强制转换,求教
代码:
CheckSex = (!this.CheckSexMale5 & !this.CheckSexFemale5) ? null : (this.CheckSexMale5 | this.CheckSexFemale5);

CheckSex                 是 bool? 类型
CheckSexMale5      是 bool  类型
CheckSexFemale5 是 bool  类型

编译时报错,报错处为三元表达式的第二个和第三个,报错信息为:
               无法确定条件表达式的类型,因为"<null>"和"bool"之间没有隐式转换。

不明白的是:
那段三元表达式的计算结果要么是null,要么是bool。而我已经将要赋值的变量CheckSex已经设置为bool?了,为什么会报错呢?


PS:
假如在表达式的第二个和第三个都加上(bool?)强制转换,就没有问题。或其中之一加上也没有问题。但没明白。
请论坛牛牛赐教下,感谢。
------解决方案--------------------
本帖最后由 bdmh 于 2014-03-17 10:41:58 编辑
!this.CheckSexMale5 & !this.CheckSexFemale5 这个结果不会是null,所以无法转换
------解决方案--------------------
把null改为0试下
------解决方案--------------------
 (!this.CheckSexMale5 & !this.CheckSexFemale5) ? false: (this.CheckSexMale5 
------解决方案--------------------
 this.CheckSexFemale5);
------解决方案--------------------
CheckSex = (!this.CheckSexMale5 & !this.CheckSexFemale5) ?(string.isnullorempty(null)) : (this.CheckSexMale5 
------解决方案--------------------
 this.CheckSexFemale5);

这样子可不可以?
------解决方案--------------------
 null : (this.CheckSexMale5 
------解决方案--------------------
 this.CheckSexFemale5);

左右两边的类型要匹配,你左边是null,也就是bool?类型,那么右边就也要是同样的类型。
原理知道了,问题解决起来就很简单了。

 null : (bool?)(this.CheckSexMale5 
------解决方案--------------------
 this.CheckSexFemale5);