错误:无法隐式转换类型'bool?' 'bool'.存在显式转换(您是否错过了演员?)
代码:
Test obj = new Test();
obj.IsDisplay = chkDisplay.IsChecked;
Run Code Online (Sandbox Code Playgroud)
但是当我使用这意味着施放在布尔然后没有错误.
Test obj = new Test();
obj.IsDisplay = (bool) chkDisplay.IsChecked;
Run Code Online (Sandbox Code Playgroud)
我需要知道,为什么需要将这个bool转换为bool.
谢谢
小智 43
正如其他人所说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;
Run Code Online (Sandbox Code Playgroud)
Nik*_*off 32
你已经声明IsChecked为bool?(Nullable<bool>).可以为空的布尔值可以是true,false或者null.现在问问自己:如果IsChecked为null,那么应该分配什么值IsDisplay(只能带一个true或者false)?答案是没有正确的答案.这里的隐式转换只会产生隐藏的麻烦,这就是设计者决定只允许显式转换而不是隐式转换的原因.
TyC*_*obb 13
bool?不是bool.它实际上是一个Nullable<bool>
http://msdn.microsoft.com/en-us/library/b3h38hb0(v=vs.110).aspx
如果你需要这个bool值,那么你应该像你正在做的那样,或者在上面调用.Value属性bool?.还有一个.HasValue属性,您可以检查以确保它不为空.
如果IsChecked为null,则此行将出错.
obj.IsDisplay = (bool) chkDisplay.IsChecked;
Run Code Online (Sandbox Code Playgroud)
Shi*_*mmy 13
当我使用null check运算符时,我正面临着你的问题?.:
if (!RolesList?.Any()) //Not accepted: cannot convert bool? to bool
Run Code Online (Sandbox Code Playgroud)
所以我正在使用它
if (RolesList?.Any() != true)
//value is null or false
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你应该这样设置:
obj.IsDisplay = chkDisplay.IsChecked ?? false;
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用下面的代码来指定false何时IsCheckednull
obj.IsDisplay = chkDisplay.IsChecked == true;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56710 次 |
| 最近记录: |