C# 什么时候可以为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

正在尝试理解GetValueOrDefault()的默认行为。如果我有一个可为null的属性,那么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;
        }
      }
   }
}
上面的代码将使用空值实例化,但调用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的定义是一个值……这就是我需要的解释。