这两种之间有什么区别
public Nullable<bool> val_a { get; set; }
public bool? val_b { get; set; }
这两种类型都是Nullable类型。
此外,我如何测试val_b在一行中是否可以为null?
这些都是一样的。就像使用Int32
或int
一样。没有区别。
测试可为null的bools是直接的,但有一个陷阱。
像if (val_a)
和if (!val_a)
这样的常见测试不起作用,因为可为null的布尔有三种状态:true
、false
和null
。
这些工作是因为你在做一个明确的比较:
if (val_a == true)
if (val_a == false)
if (val_a == null)
如果您愿意,您也可以使用null合并运算符,尽管这对其他可为null的类型更有用:
if (val_a ?? false)
如果要测试给定类型是否可以为null,请参见此处。
bool?
是Nullable<bool>
的一种简写表示法。他们是一样的。
来自文档:
任何可为null的值类型都是泛型System.nullable结构的实例。您可以以以下任何可互换形式引用具有基础类型T的可为null的值类型:nullable<T>或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);