Ala*_*ain 9 c# generics nullable type-constraints
我正在尝试定义一个泛型类,它接受任何可以设置为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); }
}
//...
Run Code Online (Sandbox Code Playgroud)
这很好用.我还想创建一个派生类,它可以采用任何原始类型(int,double等),并简单地将其解析为与上面的类相同,但原语包含在Nullable中
public abstract class BundledValue_Structs<T>
: BundledValue_Classes<T?>
where T : struct
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,这不起作用.我收到错误: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>这样它就不仅可以接受类,还可以接受任何可以赋值为null的Nullable<T>类型(包括类型,这似乎是规则的唯一例外.)
Jon*_*eet 15
Nullable<T> 是一个结构,根据文档.它根本不是一个阶级.它是一个值类型,在字段方面看起来有点像这样:
public struct Nullable<T>
{
private readonly T value;
private readonly bool hasValue;
}
Run Code Online (Sandbox Code Playgroud)
类型的null值Nullable<T>不是空引用,它只是hasValue字段为false 的值.
但是请注意,Nullable<T>它不满足约束条件where TFoo : struct,因为它实际上是一个不可为空的值类型约束.基本上Nullable<T>不满足class或struct约束.有没有约束它确实只允许可空类型(参考或Nullable<T>).
| 归档时间: |
|
| 查看次数: |
1460 次 |
| 最近记录: |