代码之家  ›  专栏  ›  技术社区  ›  Stefan Steinegger

强制(泛型)值类型为引用

  •  8
  • Stefan Steinegger  · 技术社区  · 14 年前

    我有一个带字段的结构。其中一个字段是泛型类型。泛型类型可以是 .

    struct Foo<T>
    {
      T field; // should be a reference
    }
    

    object T[] ,但两者都很尴尬。难道没有类似泛型引用类型的东西吗?

    struct Foo<T>
    {
      Reference<T> field;
    }
    

    是的,当然,我可以自己写。但我尽量避免这样

    4 回复  |  直到 14 年前
        1
  •  2
  •   TheXenocide    13 年前

    如果您试图绝对确保任何值类型都已装箱,请将其存储在对象字段中,并使用属性强制执行泛型约束;即:

    struct Example<T>
    {
        private object obj;
        public T Obj
        {
            get
            {
                return (T)obj;
            }
            set
            {
                this.obj = value;
            }
        }
    }
    
        2
  •  10
  •   this. __curious_geek    14 年前

    将T定义为类。

    struct Foo<T> where T : class
    {
      T field; // Now it's a reference type.
    }
    
        3
  •  3
  •   thecoop    14 年前

    你可以用 Tuple<T1> 保存值类型变量( Tuples

    struct Foo<T>
    {
        Tuple<T> field;
    }
    
        4
  •  -1
  •   Nissim    14 年前

    如果你想让它成为一个实例:

    where T : new()