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