我有一个带有out参数的函数的ojbect。我想用反射的Invoke来调用这个函数。但是,我找不到一种方法来指定它是一个out参数,因为它返回null。
Class Foo
{
void Do(out string a){ a="fx call"; }
}
Foo f = new Foo();
string param = string.Empty;
f.GetType().GetMethod("Do").Invoke(f, new object[] { param });
Assert.IsTrue( ! string.IsNullOrEmpty(param));
上面调用断言失败,因为param为Empty。如何指定传递的参数是“out”?
谢谢!
答案 0 :(得分:7)
Reflection将更新数组中的值,而不是传递给数组的值。保持数组引用,值将以内联方式更新。
string param = string.Empty;
object[] args = new object[] {param};
f.GetType().GetMethod("Do").Invoke(f, args);
param = (string)args[0];