gpt4 book ai didi

c# - 如何使用 MethodInfo.Invoke 将参数作为引用传递

转载 作者:IT王子 更新时间:2023-10-29 04:01:07 26 4
gpt4 key购买 nike

如何使用 MethodInfo.Invoke 将参数作为引用传递?

这是我要调用的方法:

private static bool test(string str, out byte[] byt)

我试过了,但失败了:

byte[] rawAsm = new byte[]{};
MethodInfo _lf = asm.GetType().GetMethod("test", BindingFlags.Static | BindingFlags.NonPublic);
bool b = (bool)_lf.Invoke(null, new object[]
{
"test",
rawAsm
});

返回的字节为空。

最佳答案

您需要先创建参数数组,并保留对它的引用。 out 参数值将存储在数组中。所以你可以使用:

object[] arguments = new object[] { "test", null };
MethodInfo method = ...;
bool b = (bool) method.Invoke(null, arguments);
byte[] rawAsm = (byte[]) arguments[1];

请注意您不需要为第二个参数提供值,因为它是一个 out 参数 - 该值将由该方法设置。如果它是一个 ref 参数(而不是 out),那么将使用初始值 - 但数组中的值仍然可以被该方法替换。

简短但完整的示例:

using System;
using System.Reflection;

class Test
{
static void Main()
{
object[] arguments = new object[1];
MethodInfo method = typeof(Test).GetMethod("SampleMethod");
method.Invoke(null, arguments);
Console.WriteLine(arguments[0]); // Prints Hello
}

public static void SampleMethod(out string text)
{
text = "Hello";
}
}

关于c# - 如何使用 MethodInfo.Invoke 将参数作为引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8779731/

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