使用反射方法,有效地获取数组参数
本文关键字:获取 数组 参数 有效地 反射 方法 | 更新日期: 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
所产生的相同性能开销。