[Serializable,StructLayout(LayoutKind.Sequential)]
public struct Nullable<T> where T : struct
{
//这两个字段标识状态
private Boolean hasValue = false;//假定null
internal T value = default(T);//假定所有位都为零
public Nullable(T value)
{
this.value = value;
hasValue = true;
}
public T GetValueOrDefault()
{
return value;
}
public T GetValueOrDefault(T defaultValue)
{
if (!hasValue) return defaultValue;
return value;
}
public override bool Equals(object obj)
{
if (!hasValue) return obj == null;
if (obj == null) return false;
return value.Equals(obj);
}
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);
}
//显式装换
public static explicit operator T(Nullable<T> value)
{
return value.value;
}
}