我正在尝试构建一个行为类似于 的类,特别是我无需显式调用Nullable<T>
即可访问类的基础值的方式。Nullable<T>
nullable.Value
在下面的示例行中check1
&check2
都有效。
Nullable<DateTime> nullable = new DateTime();
bool check1 = nullable >= DateTime.Now; //Works
bool check2 = nullable.Value >= DateTime.Now; //Works
我建立了自己的类TrackedValue
,它会记住它包装的值是否已更改。我基于我的Nullable<T>
并构建了隐式和显式运算符。
Nullable<T>
定义
public struct Nullable<T> where T : struct
{
public Nullable(T value);
public static explicit operator T(T? value);
public static implicit operator T?(T value);
...
}
TrackedValue<T>
定义
public class TrackedValue<T> : IChangeTracking
{
...
T trackedValue;
public T Value
{
get
{
return this.trackedValue;
}
set
{
this.trackedValue = value;
}
}
public static explicit operator T(TrackedValue<T> value)
{
return value.Value;
}
public static implicit operator TrackedValue<T>(T value)
{
return new TrackedValue<T>() { Value = value };
}
}
所以我期待以下工作,但由于以下check3
原因无法编译:
Argument 1: cannot convert from 'TrackedValue<System.DateTime>' to 'System.DateTime'
TrackedValue<DateTime> trackedValue = new DateTime();
bool check3 = trackedValue >= DateTime.Now; //Does not work
bool check4 = trackedValue.Value >= DateTime.Now; //Works
任何指针将不胜感激。