C#基础语法:可空类型详解

前端技术 2023/09/02 C#

以下是System.Nullable<T>在FCL中的定义。

[Serializable, StructLayout(LayoutKind.Sequential)]
public struct Nullable<T> where T :struct
{
 private Boolean hasValue= false;
 internal T value= default(T);

public Nullable(T value)
 {
this.value= value;
this.hasValue= true;
 }

public Boolean HasValue {get {return hasValue; } }

public T Value
 {
get
  {
  if (!hasValue)
    {
   throw new InvalidOperationException(\"Nullable object must have a value.\");
    }
   return value;
  }
 }

public T GetValueOrDefault() {return value; }
public T GetValueOrDefault(T defaultValue)
 {
if(!HasValue)return defaultValue;
return value;
 }

public override Boolean Equals(object other)
 {
if(!HasValue)return (other== null);
if(other== null)return false;
return value.Equals(other);
 }

public override int GetHashCode()
 {
if(!HasValue)return 0;
return value.GetHashCode();
 }

public override string ToString()
 {
if(!HasValue)return \"\";
return value.ToString();
 }

public static implicit operator Nullable<T>(T value)
 {
return new Nullable<T>(value);
 }
}

可以看出 null 的类型的每个实例都具有两个公共的只读属性:

1.HasValue

HasValue 属于 bool 类型。当变量包含非 null 值时,它被设置为 true。

2.Value

Value 的类型与基础类型相同。如果 HasValue 为 true,则说明 Value 包含有意义的值。如果 HasValue 为 false,则访问 Value 将引发 InvalidOperationException。

那么我们怎么定义可空类型?

null 的类型可通过下面两种方式中的一种声明:

复制代码 代码如下:

System.Nullable<T> variable

- 或 -

T? variable

本文地址:https://www.stayed.cn/item/4018

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。