C#需要可为空的显式强制转换
为什么编译器不能找出正确的操作数始终为false,并要求我将其强制转换为C#需要可为空的显式强制转换,c#,C#,为什么编译器不能找出正确的操作数始终为false,并要求我将其强制转换为bool?既然您要赋值给bool,那么正确的操作数就是可为null的_成功。这不能隐式转换为bool,这就是为什么需要转换 如果删除此分配,则它将正常工作: private bool? _success; public bool Success { get { return _success ?? (_success = false);
bool
?既然您要赋值给bool,那么正确的操作数就是可为null的
_成功
。这不能隐式转换为bool,这就是为什么需要转换
如果删除此分配,则它将正常工作:
private bool? _success;
public bool Success
{
get
{
return _success ?? (_success = false);
}
}
这是因为“false”已经是一个bool
但是,在将当前代码的值指定为
false
后,将返回\u success
由于_success
是一个bool?
,因此右侧操作数返回bool?
,而不是bool
,通常使用GetValueOrDefault()编写:
第二个不会编译-它有相同的问题。第一种方法有效,但逻辑不同(因为它不再将\u success
分配给false
。(不过,我同意这是一种更常见的用法…)请注意,如果您从未直接阅读<代码>成功> /COD>,您可能希望仅考虑Auto属性用于<代码>成功< /代码>,并删除<代码>成功> <代码>(附有代码>私有集合>).bool
默认为false
。当然,只有在没有私有实现细节赋予\u success
为null
意义时,这才是正确的。
return _success ?? false;
private bool? _success;
public bool Success
{
get
{
return _success.GetValueOrDefault(false);
}
}