使用Invoke调用带有out参数的函数

时间:2009-05-07 19:06:43

标签: .net reflection

我有一个带有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”?

谢谢!

1 个答案:

答案 0 :(得分:7)

Reflection将更新数组中的值,而不是传递给数组的值。保持数组引用,值将以内联方式更新。

string param = string.Empty;
object[] args = new object[] {param};
f.GetType().GetMethod("Do").Invoke(f, args);
param = (string)args[0];