我有一段代码示例:
bool _HasParsed;
object IsCheckedAsObj = GetCheckedStatus();
if (IsCheckedAsObj == null)
{
throw new InvalidOperationException("Status not found");
}
_HasParsed = (bool?)IsCheckedAsObj; //why (bool?) instead of (bool)
在最后一行中,我可以理解他们正在将对象解析为boolean。那是什么'?'在那里? (bool?)而不是(bool)之间的区别是什么?
答案 0 :(得分:5)
bool?
类型是Nullable<bool>
的缩写。
代码不能按原样编译。您将收到错误消息“无法隐式转换类型'bool?' 'bool'。“。
如果您将变量声明为可为空,那么它将起作用:
bool? _HasParsed;
这当然意味着您需要在代码中进行其他更改。您可以使用_HasParsed.HasValue
检查变量是否为空,并使用_HasParsed.Value
获取bool值。
答案 1 :(得分:4)
bool?
是Nullable<bool>
的简写。您的代码不需要它,因为在分配之前会对null
进行检查。
已编辑:正如Jeow Li Huan在评论中正确指出的那样,对null
的检查意味着GetCheckedStatus()
的返回值属于bool?
类型。以下简化的剪辑将与OP的问题中的原始代码相同:
object IsCheckedAsObj = GetCheckedStatus();
if (IsCheckedAsObj == null)
throw new InvalidOperationException("Status not found");
bool _HasParsed = (bool)IsCheckedAsObj;
答案 2 :(得分:1)
答案 3 :(得分:1)
?
的类型,例如bool?
为nullable。了解如何use them。
它也可以表示为Nullable<bool>
。并且只能应用于struct
类型。
Nullable类型的功能是您可以为其分配值或null
。
使用:
int? number;
// do something with number
if (number.HasValue)
{
Console.WriteLine(number.Value);
}
else
{
Console.WriteLine("No value");
}
或
Console.WriteLine(number.HasValue ? number.Value : "No value");
答案 4 :(得分:0)
这意味着它是boolean
,也可以是null
。
答案 5 :(得分:0)
?
是下面结构的简写:
struct Nullable<T>
{
public bool HasValue;
public T Value;
}
你可以直接使用这个结构,但是?是使结果代码更清晰的快捷语法。而不是键入: Nullable x = new Nullable(125);
相反,你可以写: 诠释? x = 125;
这不适用于字符串,因为字符串是引用类型而不是值类型。