gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:23:50 25 4
gpt4 key购买 nike

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

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

大多数情况下这会很好,但它为多线程错误打开了大门。

有没有更好的方法可以做到这一点而无需在各处分配微型数组?

最佳答案

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

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

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

关于c# - 使用有效获取数组参数的反射方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38111987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com