用于 '?' 在铸造期间

San*_*ndy 0 c# casting c#-4.0

我有一段代码示例:

bool _HasParsed;
object IsCheckedAsObj = GetCheckedStatus();
if (IsCheckedAsObj == null)
{
    throw new InvalidOperationException("Status not found");
}
_HasParsed = (bool?)IsCheckedAsObj;    //why (bool?) instead of (bool)
Run Code Online (Sandbox Code Playgroud)

在最后一行中,我可以理解他们正在将对象解析为boolean.那是什么'?' 在那里?(bool?)而不是(bool)之间的区别是什么?

Guf*_*ffa 5

类型bool?是简写Nullable<bool>.

代码不能按原样编译.您将收到错误消息"无法隐式转换类型'bool?' 'bool'."

如果您将变量声明为可为空,那么它将起作用:

bool? _HasParsed;
Run Code Online (Sandbox Code Playgroud)

这当然意味着您需要在代码中进行其他更改.您可以使用_HasParsed.HasValue检查变量是否为null,并用于_HasParsed.Value获取bool值.