2009-05-07 20 views
2

私はout引数を取る関数を持つojbectを持っています。私はリフレクションのInvokeを使ってこの関数を呼びたいと思います。しかし、nullが返されるため、out引数であることを指定する方法が見つかりません。Invokeを使用してout引数を持つ関数を呼び出す

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なので失敗します。どのように渡されているargumetnが「出ている」と指定することができますか?

ありがとうございます!

答えて

7

Reflectionは配列に渡された値ではなく、配列の値を更新します。配列参照を保持すると、値はインラインで更新されます。

string param = string.Empty; 
object[] args = new object[] {param}; 
f.GetType().GetMethod("Do").Invoke(f, args); 
param = (string)args[0]; 
関連する問題