在codereview meeting上有同事说使用可空类型的.hasvalue()来判断变量是否为空比较好,请问哪位大侠讲讲深层次的原因?
例如:     int? test=1;
if(test.HasValue())
...
if(test!=null)
...两个if 条件有什么深层次的区别?

解决方案 »

  1.   

    public struct Nullable<T> where T : struct
    {private bool hasValue;
      internal T value;
      public Nullable(T value)
      {
      this.value = value;
      this.hasValue = true;
      }  public bool HasValue
      {
      get
      {
      return this.hasValue;
      }
      }
    }
      

  2.   

    可空类型可以像普通值类型一样的使用。事实上,可以使用内建的隐式转换来转换相同类型的可空变量和非可空变量。这意味着你可以在一个标准整型和可空整型之间相互转换:int? nFirst = null;
    int Second = 2;nFirst = Second; // 有效
    nFirst = 123; // 有效
    Second = nFirst; // 同样有效nFirst = null; // 有效
    Second = nFirst; // 例外,后者是非空类型   在以上的语句里,你可以看到如果可空变量不包含空值的话是可以和非可空变量交换值的。如果它是一个空值,那么就会抛出例外。为了防止例外,你可以使用可空变量的HasValue属性:if (nFirst.HasValue) Second = nFirst;   你可以看到,如果nFirst有值赋值就会发生,否则程序会跳过此句语句。