两种Nullable类型之间的区别?

时间:2020-03-22 23:26:44

标签: c#

这两者之间有什么区别

$this->createForm

这些都是Nullable类型。

我又如何测试val_b在一行中是否可以为空?

2 个答案:

答案 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)

这些是同一回事。就像使用Int32int一样。没什么。

测试可为空的布尔型很简单,但是有一个陷阱。

if (val_a)if (!val_a)这样的通用测试不起作用,因为可为空的布尔值具有三种状态:truefalsenull

这些工作是因为您要进行显式比较:

if (val_a == true)
if (val_a == false)
if (val_a == null)

您也可以根据需要使用null合并运算符,尽管这对于其他可为null的类型更有用:

if (val_a ?? false)

如果要测试给定类型是否可为空,请参见here