C# 什么时候可以为null而不是null?
正在尝试理解GetValueOrDefault()的默认行为。如果我有一个可为null的属性,那么GetValueOrDefault()应该返回基础默认值或null的实例化值……因为该实例化值(null)将是该值,因此我们不需要获取“默认”值 例如:C# 什么时候可以为null而不是null?,c#,C#,正在尝试理解GetValueOrDefault()的默认行为。如果我有一个可为null的属性,那么GetValueOrDefault()应该返回基础默认值或null的实例化值……因为该实例化值(null)将是该值,因此我们不需要获取“默认”值 例如: namespace Nullable_test { public class AutoPropNullTest { public int? AutoValue { get; set; } } public cla
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;
}
}
}
}
上面的代码将使用空值实例化,但调用ValuerDefault将返回零
ManualPropNullTest x = new ManualPropNullTest();
AutoPropNullTest y = new AutoPropNullTest();
//x & y will inspect as null
int? q = x.ManualValue.GetValueOrDefault();
//q will result in zero
我理解这是一个令人毛骨悚然的问题,只是试图与我认为的违约应该是什么和现实是什么相协调
谢谢默认值实际上是:
默认值的类型是当前值的类型参数
可为null的对象,并且默认值的值仅由
二进制零的数目
从
因此,为了回答您的问题,不管类型参数的二进制零值是什么。GetValuerDefault返回默认值(T),如果可空类型上的HasValue为false。(默认值(int)为0)int(Int32)的默认值为0。整数?(Nullable)实例没有指定整数值,因此它返回int的默认值,即0 可空的
null
类型将值类型封装在编译器和运行时理解为“可空”类型的类型中,因为它可以在某些上下文中被视为具有空值
但是请注意,null
值意味着缺少一个值,而不是一些默认值
调用GetValueOrDefault()
时,需要的是nullable
值中的不可空值,或者如果nullable
值实际上是“null”,则是值类型自身的默认值
在这个场景中,您应该期望底层的默认值。这正是该方法想要返回的。还请注意,这实际上是一个实际值,因此如果分配给另一个
null
变量,将被视为非null(即该值存在)。ValueOrDefaultValueForTheUnderlyingType
太长,无法键入。甚至ValueOrDefaultForTheUnderlyingValueType
Yes,GetValueOrDefault()
将返回0-您希望它做什么?请注意,可以使用局部变量显示完全相同的效果-不需要这些属性…”GetValueOrDefault方法返回一个值,即使HasValue属性为false(与引发异常的value属性不同)。@user1278561:您是否阅读了GetValueOrDefault()
的文档?假设您在一个Nullable
上调用它,那么它将返回类型为int
的值,它怎么可能返回null
呢?null的定义是一个值……这就是我需要的解释。