两种可为null的类型之间的区别



这两种之间有什么区别

public Nullable<bool> val_a { get; set; } 
public bool? val_b { get; set; } 

这两种类型都是Nullable类型。

此外,我如何测试val_b在一行中是否可以为null?

这些都是一样的。就像使用Int32int一样。没有区别。

测试可为null的bools是直接的,但有一个陷阱。

if (val_a)if (!val_a)这样的常见测试不起作用,因为可为null的布尔有三种状态:truefalsenull

这些工作是因为你在做一个明确的比较:

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);

最新更新