【发布时间】:2013-12-14 21:57:55
【问题描述】:
我正在尝试定义一个泛型类,它采用可以设置为 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> 类型,这似乎是唯一的例外)规则。)
【问题讨论】:
-
旁注:我强烈建议您遵循 .NET 命名约定。
customTuple<T>这个名字不这样做... -
@JonSkeet 这只是我从课堂上删除了很多杂物以使示例更清晰。
-
提供简洁、简短的示例很好 - 但忽略正常的命名约定并没有增加清晰度。
-
为什么会有Java标签?删除它..
标签: c# generics nullable type-constraints