这两者之间有什么区别
$this->createForm
这些都是Nullable类型。
我又如何测试val_b在一行中是否可以为空?
答案 0 :(得分:1)
bool?
是Nullable<bool>
的简写。他们是一样的。
来自docs:
任何可为空的值类型都是通用System.Nullable结构的实例。您可以使用以下任何可互换形式来引用具有基础类型T的可为空的值类型:Nullable
或T?。
要测试val_b
是否为null
,只需检查val_b.HasValue
。例如:
if (val_b.HasValue)
{
var b = val_b.Value;
}
您还可以执行以下操作:
var b = val_b.GetValueOrDefault();
或
var b = val_b ?? false;
如果使用bool
,则default
将是false
。
要将default
的值覆盖为true
,可以使用GetValueOrDefault
重载:
var b = val_b.GetValueOrDefault(true);
答案 1 :(得分:1)
这些是同一回事。就像使用Int32
或int
一样。没什么。
测试可为空的布尔型很简单,但是有一个陷阱。
像if (val_a)
和if (!val_a)
这样的通用测试不起作用,因为可为空的布尔值具有三种状态:true
,false
和null
。
这些工作是因为您要进行显式比较:
if (val_a == true)
if (val_a == false)
if (val_a == null)
您也可以根据需要使用null合并运算符,尽管这对于其他可为null的类型更有用:
if (val_a ?? false)
如果要测试给定类型是否可为空,请参见here。