我想定义一个通用类,可以接收任何可以设置为null的类型:
public abstract class BundledValue_Classes<T>
where T : class
{
private Tuple<T, object> _bundle= new Tuple<T, object>();
public T Value
{
get { return _bundle == null ? null : _bundle.Item1; }
set { _bundle = new Tuple<T, object>(value, obj); }
}
//...
这个很好用。我还想创建一个派生类,可以接受任何基本类型(int、double等),并将其解析为与上述类相同的内容,但其中基本类型被包装在Nullable中。
public abstract class BundledValue_Structs<T>
: BundledValue_Classes<T?>
where T : struct
{
//...
}
但是由于某些原因,这并不起作用。我收到了错误信息:
The type 'T?' must be a reference type in order to use it as parameter 'T' in the generic type or method 'BundledValue_Classes<T>'
。你明白我在尝试做什么吗?我不想复制整个
BundledValue_Classes<T>
类的内容来处理包含在Nullable<T>
中的基元情况。也许有一种方法可以设置
BundledValue_Classes<T>
的类型约束,以便它不仅接受类,还接受任何可以分配空值的类型(包括Nullable<T>
类型,这似乎是唯一的例外)。
customTuple<T>
没有这样做... - Jon Skeet