使用反射设置C#struct / class字段时是否可以避免装箱?

时间:2015-12-02 15:14:51

标签: c# reflection mono boxing

假设我有一个原始值,我需要使用反射分配给某个字段。我确信该字段具有相同的原始值类型。

是否有可能以某种方式设置此值而不用拳击?

void SetFloat(object o, string name, float val)
{
  var type = o.GetType();
  var fld = type.GetField(name);
  fld.SetValue(o, val /*boxing happens here*/);
}

P.S。这不是关于延迟,而是关于可能的GC压力。我正在使用Unity3D,它使用的是旧的Mono版本,而后者又使用非常优化的GC实现。每个额外的内存分配计数:(

P.P.S我正在构建自己的基于C#的解释器,避免反射似乎几乎不可能。

1 个答案:

答案 0 :(得分:0)

field.SetValueDirect可能存在,但缺点是您不能使用IL2CPP,因为它不支持此功能。