使用反射设置C#结构/类字段时,是否可以避免装箱

本文关键字:是否 可以避免 字段 反射 设置 结构 | 更新日期: 2023-09-27 18:25:18

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

是否可以在不装箱的情况下以某种方式设置此值?

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

附言:这实际上与延迟无关,而是可能的GC压力。我使用的是Unity3D,它使用了非常旧的Mono版本,而Mono版本又使用了一个非常不优化的GC实现。每个额外的内存分配计数:(

附言:我正在构建自己的基于C#的解释器,避免反思似乎几乎是不可能的。

使用反射设置C#结构/类字段时,是否可以避免装箱

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