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

时间:2010-08-31 08:49:11

标签: c# reference value-type

我有一些包含某些字段的结构。其中一个字段是泛型类型。泛型类型可以是引用类型或值类型

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

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

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

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

是的,当然,我可以写自己的。但我正试图避免那个

4 个答案:

答案 0 :(得分:10)

将T定义为一个类。

struct Foo<T> where T : class
{
  T field; // Now it's a reference type.
}

答案 1 :(得分:3)

您可以使用Tuple<T1>来保存您的值类型变量(Tuples是BCL中的类)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:-1)

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

where T : new()