尝试了解GetValueOrDefault()的默认行为。如果我有一个可空属性,GetValueOrDefault()将返回基础默认值或实例化值null ...因为该实例化值(null)将是值,所以我们不需要得到一个"默认"值。
例如:
namespace Nullable_test
{
public class AutoPropNullTest
{
public int? AutoValue { get; set; }
}
public class ManualPropNullTest
{
private int? i;
public int? ManualValue
{
get
{
return i;
}
set
{
i = value;
}
}
}
}
以上将使用空值进行实例化,但调用ValueOrDefault将返回零。
ManualPropNullTest x = new ManualPropNullTest();
AutoPropNullTest y = new AutoPropNullTest();
//x & y will inspect as null
int? q = x.ManualValue.GetValueOrDefault();
//q will result in zero
我知道这是一个分裂的头发类型的问题,只是试图调和我认为默认应该是什么以及现实是什么。
谢谢
答案 0 :(得分:4)
Nullable<T>
类型将值类型包装在编译器和运行时理解为&#34; nullable&#34;的类型中。类型,因为它可以在某些上下文中处理,就好像它可以有一个空值。
但请注意,null
值表示值的缺席,而不是默认值。
当您致电GetValueOrDefault()
时,您要求的是来自Nullable<T>
值的不可为空的值,或值类型&# 39; s 拥有默认值,如果Nullable<T>
值实际上是&#34; null&#34;。
在这种情况下,您应该期望基础默认值。这正是该方法旨在返回的内容。另请注意,这实际上是一个实际的值,因此如果分配给另一个Nullable<T>
变量,则会被视为非null (即值为本)。
答案 1 :(得分:3)
答案 2 :(得分:1)
如果Nullable类型的HasValue为false,则GetValueOrDefault返回默认值(T)。 (默认(int)为0)
答案 3 :(得分:0)
int(Int32)的默认值为0. int? (Nullable)实例没有分配整数值,因此它返回int的默认值,即0。