我想知道 - 我什么时候想在可空类型上使用 .Value 成员,而不仅仅是调用变量本身?
例如。
布尔?b = 真;
为什么我要使用 b.Value 而不是只使用 b 来获取值?.Value 调用增加了什么优势或功能?
value 属性是只读的,将返回实际的值类型。value 属性永远不能为空。
如果您希望有一个可为空的返回值,请检查 .HasValue,然后引用 Value。例如,如果要将 Nullable 的值分配给普通 bool,则必须引用它的值:
bool? nullableBool = null;
if (nullableBool.HasValue)
{
bool realBool = nullableBool.Value;
}
但是,以下内容不会编译:
bool? nullableBool = true;
bool realBool = nullableBool; // Won't work
.Value 返回一个布尔值而不是一个布尔值?这将允许您将其用作不期望可为空类型的函数的参数。
当您想使用底层类型的方法/属性时。并不真正适用于布尔。让我来说明一下DateTime
:
DateTime? d;
int month = d.Value.Month;
您不能直接从 d 访问 Month 属性,因为 DateTime? 没有这个属性。
唯一的区别是它们是两种不同的类型。如果你有一个布尔?那么它是一个可以为空的布尔类型。
如果您调用b.Value您实际上返回的是布尔值而不是布尔值?.
微妙,但是当您需要对象的不可为空版本时,请使用 .Value 属性。
对我来说,它的价值不如我认为有用的属性“HasValue”