我正在阅读CLR Via C# 书并尝试提供的示例。
[Serializable, StructLayout(LayoutKind.Sequential)]
public struct MyNullable<T> where T : struct
{
private readonly bool _hasValue ; //Should be false
private readonly T _value; //Really should be value=default(T)
public MyNullable(T value)
{
_value = value;
_hasValue = true;
}
public bool 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)
{
return !_hasValue ? defaultValue : _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()
{
return !_hasValue ? 0 : _value.GetHashCode();
}
public override string ToString()
{
return _hasValue ? _value.ToString() : "";
}
public static implicit operator MyNullable<T>(T value)
{
return new MyNullable<T>(value);
}
public static explicit operator T(MyNullable<T> value)
{
return value.Value;
}
}
这段代码应该让我为 MyNullable 分配一个空值
MyNullable i = null;
但 Visual Studio 给我的错误消息是“无法将源类型 null 转换为目标类型 MyNullable”
我认为 公共静态隐式运算符 MyNullable(T value) 和
**public static explicit operator T(MyNullable<T> value)**
成功了,但似乎并非如此。
有什么办法可以让这段代码工作吗?
谢谢。