我正在尝试实现Nullable类型。但是下面提到的代码不支持valuetype数据类型的空值。
using System;
using System.Runtime;
using System.Runtime.InteropServices;
namespace Nullable
{
[Serializable, StructLayout(LayoutKind.Sequential)]
public struct Nullable<T> where T : struct
{
private bool hasValue;
public bool HasValue
{
get { return hasValue; }
}
internal T value;
public Nullable(T value)
{
this.value = value;
this.hasValue = true;
}
public T Value
{
get
{
if (!this.hasValue)
{
new InvalidOperationException("No value assigned");
}
return this.value;
}
}
public T GetValueOrDefault()
{
return this.value;
}
public T GetValueOrDefault(T defaultValue)
{
if (!this.HasValue)
{
return defaultValue;
}
return this.value;
}
public override bool Equals(object obj)
{
if (!this.HasValue)
{
return obj == null;
}
if (obj == null)
{
return false;
}
return this.value.Equals(obj);
}
public override int GetHashCode()
{
if (!this.hasValue)
{
return 0;
}
return this.value.GetHashCode();
}
public override string ToString()
{
if (!this.hasValue)
{
return string.Empty;
}
return this.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;
}
}
}
当我尝试将值赋为null时,它会抛出一个错误:"Cannot convert null to 'Nullable.Nullable' because it is a non-nullable value type"
要解决这个问题,我该怎么做?