使用有效获取数组参数的反射方法

时间:2016-06-30 00:05:21

标签: c# unity3d reflection

目前我正在使用一些静态数组来避免为采用数组的反射方法创建垃圾:

public static readonly object[]
    OneObject = new object[1],
    TwoObjects = new object[2];

然后我用它们像:

public void Write(BinaryWriter writer, object value)
{
    Reflection.TwoObjects[0] = writer;
    Reflection.TwoObjects[1] = value;
    WriteMethod.Invoke(null, Reflection.TwoObjects);
}

大部分时间这都没问题,但它为多线程错误打开了大门。

有没有更好的方法来实现这一点而不需要在整个地方分配微小的阵列?

1 个答案:

答案 0 :(得分:2)

如果您知道底层方法的签名,则可以创建强类型委托并改为调用它。例如(假设method是一个MethodInfo实例,表示返回void并以BinaryWriterobject作为参数的静态方法:

var myMethod = (Action<BinaryWriter, object>)Delegate.CreateDelegate(typeof(Action<BinaryWriter, object>), method);
myMethod(writer, obj);

这样做的另一个好处是,调用委托不会产生与MethodInfo.Invoke引发相同的性能开销。