MethodInfo.Invoke
を使用してパラメーターを参照として渡すにはどうすればよいですか?
これは私が呼び出したいメソッドです:
private static bool test(string str, out byte[] byt)
私はこれを試しましたが、失敗しました:
byte[] rawAsm = new byte[]{};
MethodInfo _lf = asm.GetTypes()[0].GetMethod("test", BindingFlags.Static | BindingFlags.NonPublic);
bool b = (bool)_lf.Invoke(null, new object[]
{
"test",
rawAsm
});
返されるバイトはnullです。
最初に引数配列を作成し、それへの参照を保持する必要があります。 out
パラメーター値は配列に保存されます。以下を使用できます。
object[] arguments = new object[] { "test", null };
MethodInfo method = ...;
bool b = (bool) method.Invoke(null, arguments);
byte[] rawAsm = (byte[]) arguments[1];
2番目の引数は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";
}
}