错误:无法隐式转换类型'bool?' 'bool'。存在显式转换(您是否错过了演员?)
代码:
Test obj = new Test();
obj.IsDisplay = chkDisplay.IsChecked;
但是当我使用这意味着在bool中施放时,则没有错误。
Test obj = new Test();
obj.IsDisplay = (bool) chkDisplay.IsChecked;
我需要知道,为什么需要将这个bool转换为bool。
由于
答案 0 :(得分:39)
正如其他人所说bool?
不等于bool
。 bool?
也可以是null
,请参阅Nullable<t>
(msdn)。
如果您知道null
州想要暗示什么,您可以轻松使用?? - null-coalescing operator(msdn)将bool?
转换为bool
,没有任何副作用(Exception
)。
示例:
//Let´s say "chkDisplay.IsChecked = null" has the same meaning as "chkDisplay.IsChecked = false" for you
//Let "check" be the value of "chkDisplay.IsChecked", unless "chkDisplay.IsChecked" is null, in which case "check = false"
bool check = chkDisplay.IsChecked ?? false;
答案 1 :(得分:26)
您已将IsChecked
声明为bool?
(Nullable<bool>
)。可以为空的布尔值可以是true
,false
或null
。现在问问自己:如果IsChecked
为空,那么应该将哪个值分配给IsDisplay
(只能使用true
或false
)?答案是没有正确的答案。这里的隐式转换只会产生隐藏的麻烦,这就是设计师决定只允许显式转换而不是隐式转换的原因。
答案 2 :(得分:11)
bool?
不是bool
。它实际上是Nullable<bool>
http://msdn.microsoft.com/en-us/library/b3h38hb0(v=vs.110).aspx
如果您需要bool
值,那么您应该按照自己的方式进行投射,或者调用.Value
上的bool?
属性。还有一个.HasValue
属性,您可以检查以确保它不为空。
如果IsChecked
为空,则此行将出错。
obj.IsDisplay = (bool) chkDisplay.IsChecked;
答案 3 :(得分:9)
当我使用空检查操作符?.
时,我正在面对您的问题:
if (!RolesList?.Any()) //Not accepted: cannot convert bool? to bool
所以我改用
if (RolesList?.Any() != true)
//value is null or false
在你的情况下你应该这样设置:
obj.IsDisplay = chkDisplay.IsChecked ?? false;
答案 4 :(得分:5)
bool不等于bool?
bool
可以使用两个值,true
和false
bool?
可以取三个,true false
和null
这就是他们不同的原因
答案 5 :(得分:3)
您可以使用以下代码
obj.IsDisplay = chkDisplay.IsChecked == true?true:false;
答案 6 :(得分:1)
chkDisplay.IsChecked
的类型为bool?
。这意味着它可以包含值true
,false
和null
。
但是,obj.IsDisplay
的类型为bool
。这意味着它只能保留true
或false
。
因此,您必须明确地将其强制转换为bool
类型。但是,如果您尝试强制转换为bool的值为null
,则仍会抛出异常。
bool? nullableBool = null;
bool notNullableBool = (bool)nullableBool; //This will throw InvalidOperationException
答案 7 :(得分:0)
将可为空的值转换为值类型
[HttpPost]
public ActionResult Index(bool? checkOffAge)
{
if (checkOffAge != null) {
model.CheckOffAge =(bool)checkOffAge;
}
}
答案 8 :(得分:0)
尝试
if (asset.IsUp ?? false)