以下是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 的类型可通过下面两种方式中的一种声明:
- 或 -
T? variable
本文地址:https://www.stayed.cn/item/4018
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我