';?的使用';在铸造过程中
本文关键字:过程中 | 更新日期: 2023-09-27 18:24:13
我有一段示例代码:
bool _HasParsed;
object IsCheckedAsObj = GetCheckedStatus();
if (IsCheckedAsObj == null)
{
throw new InvalidOperationException("Status not found");
}
_HasParsed = (bool?)IsCheckedAsObj; //why (bool?) instead of (bool)
在最后一行中,我可以理解他们正在将对象解析为布尔值。但那是什么在那里干什么?(bool?)和(bool)有什么区别?
类型bool?
是Nullable<bool>
的简写。
代码并没有按原样编译。您将收到错误消息"无法将类型"bool?"隐式转换为"bool"。"。
如果您也将变量声明为可为null,它将起作用:
bool? _HasParsed;
当然,这可能意味着您需要对代码进行其他更改。您可以使用_HasParsed.HasValue
来检查变量是否为空,并使用_HasParsed.Value
来获取布尔值。
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;
bool
和bool?
之间的区别在于bool?
是Nullable<bool>
,这意味着布尔有三个可能的值:false
、true
和null
(=未设置)。
bool? nullableBool = null;
if ( b.HasValue )
{
bool notNullableBool = b.Value;
}
这是MSDN文档。
具有?
的类型(如bool?
)可以为null。学习如何使用它们。
它也可以表示为CCD_ 20。并且只能应用于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");
这意味着它是一个boolean
,也可以是null
。
请参阅MSDN上的Nullable Types。
?
是以下结构的简写:
struct Nullable<T>
{
public bool HasValue;
public T Value;
}
您可以直接使用此结构,但是?是使生成的代码更加干净的快捷语法。与其键入:Nullable x=新的Nullable(125);
相反,您可以写:int?x=125;
这不适用于字符串,因为字符串是引用类型,而不是值类型。