Сначала необходимо создать массив аргументов и сохранить ссылку на него.Значение параметра 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";
}
}