强制(通用)值类型作为引用

Ste*_*ger 8 c# reference value-type

我有一些带有一些字段的结构.其中一个字段是泛型类型.泛型类型可以是引用类型或值类型.

我想强制它在内部存储为引用,以避免结构变得太大.

struct Foo<T>
{
  T field; // should be a reference
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用object或者T[],但两者都很尴尬.是不是像通用的参考类型?

struct Foo<T>
{
  Reference<T> field;
}
Run Code Online (Sandbox Code Playgroud)

是的,当然,我可以写自己的.但我试图避免这种情况

thi*_*eek 10

将T定义为一个类.

struct Foo<T> where T : class
{
  T field; // Now it's a reference type.
}
Run Code Online (Sandbox Code Playgroud)

  • 你可以简单地将`field`打包成一个对象类型[这是我脑海中唯一的gud解决方案].你到底想要做什么? (2认同)

The*_*ide 2

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

struct Example<T>
{
    private object obj;
    public T Obj
    {
        get
        {
            return (T)obj;
        }
        set
        {
            this.obj = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)