为什么Nullable <T>被认为是结构而不是类?

 于华521_811 发布于 2023-02-10 13:41

我正在尝试定义一个泛型类,它接受任何可以设置为null的类型:

public abstract class BundledValue_Classes 
    where T : class
{
    private Tuple _bundle= new Tuple();
    public T Value
    { 
        get { return _bundle == null ? null : _bundle.Item1; }
        set { _bundle = new Tuple(value, obj); }
    }
    //...

这很好用.我还想创建一个派生类,它可以采用任何原始类型(int,double等),并简单地将其解析为与上面的类相同,但原语包含在Nullable中

public abstract class BundledValue_Structs 
    : BundledValue_Classes 
    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'

我明白在这里要做什么?我不想复制粘贴整个BundledValue_Classes类的内容只是为了处理包含在一个原语的情况Nullable.

也许有一些方法可以设置类型约束,BundledValue_Classes这样它就不仅可以接受类,还可以接受任何可以赋值为null的Nullable类型(包括类型,这似乎是规则的唯一例外.)

1 个回答
  • Nullable<T> 一个结构,根据文档.它根本不是一个阶级.它是一个值类型,在字段方面看起来有点像这样:

    public struct Nullable<T>
    {
        private readonly T value;
        private readonly bool hasValue;
    }
    

    类型的nullNullable<T>不是空引用,它只是hasValue字段为false 的值.

    但是请注意,Nullable<T>它不满足约束条件where TFoo : struct,因为它实际上是一个不可为空的值类型约束.基本上Nullable<T>不满足classstruct约束.有没有约束它确实只允许可空类型(参考或Nullable<T>).

    2023-02-10 13:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有