需要显式强制转换
本文关键字:转换 | 更新日期: 2023-09-27 18:15:13
private bool? _success;
public bool Success
{
get
{
return _success ?? (_success = false);
}
}
为什么编译器不能找出正确的操作数总是假的,并要求我将其强制转换为bool
?
右操作数是Nullable<bool>
,因为您正在分配给bool? _success
。这不能隐式地强制转换为bool类型,这就是为什么需要强制转换的原因。
如果你删除了赋值,那么它将正常工作:
return _success ?? false;
这可以工作,因为"false"已经是一个bool
。
然而,你当前的代码在赋值false
后返回_success
。As _success
是bool?
,右操作数返回的是bool?
,而不是bool
。
您通常会使用GetValueOrDefault()
:
private bool? _success;
public bool Success
{
get
{
return _success.GetValueOrDefault(false);
}
}
从c# 8.0及以上版本开始,您可以使用空合并赋值操作符??=
,并将其写得最简洁:
private bool? _success;
public bool Success => _success ??= false;
编译器将对整个表达式求值,并考虑表达式的右边匹配所需的bool
类型。