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

本文关键字:获取 数组 参数 有效地 反射 方法 | 更新日期: 2023-09-27 17:53:39

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

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);
}

大多数情况下这是可以的,但是它打开了多线程bug的大门。

有没有更好的方法来做到这一点,而不是到处分配小数组?

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

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

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

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

相关文章: