1

前の質問MethodInfoで、アクション デリゲートからを取得する方法を尋ねました。この Action デリゲートは匿名で (Lambda から) 作成されました。私が今抱えている問題は、 が属するMethodInfoオブジェクトが必要なため、を呼び出せないことです。MethodInfoこの場合、デリゲートは匿名であるため、所有者は存在しません。次の例外が発生します。

System.Reflection.TargetException : オブジェクトがターゲット タイプと一致しません。

私が使用しているフレームワーク (NUnit) では、リフレクションを使用して実行する必要があるため、提供された壁の中で遊ぶ必要があります。Emit既に持っているデリゲートを実行するためだけに、動的アセンブリ/モジュール/タイプ/メソッドを作成するために使用することに頼りたくありません。

ありがとう。

4

2 に答える 2

3

すでにMethodプロパティを取得しています。MethodInfo.Invoke()の最初の引数として渡すTargetプロパティが必要です。

using System;

class Program {
    static void Main(string[] args) {
        var t = new Test();
        Action a = () => t.SomeMethod();
        var method = a.Method;
        method.Invoke(a.Target, null);
    }
}

class Test {
    public void SomeMethod() {
        Console.WriteLine("Hello world");
    }
}
于 2010-04-07T17:34:11.480 に答える