我有一些包含某些字段的结构。其中一个字段是泛型类型。泛型类型可以是引用类型或值类型。
我想强制它在内部存储为引用,以避免结构变得太大。
struct Foo<T>
{
T field; // should be a reference
}
我知道我可以使用object
或T[]
,但两者都很尴尬。是不是像通用的参考类型?
struct Foo<T>
{
Reference<T> field;
}
是的,当然,我可以写自己的。但我正试图避免那个
答案 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()