1

私のアプリケーションには、小さなアクション ログがあります。そこで、アプリケーション内の特定のメソッドの最後のいくつかの呼び出しを次のように保存します。

saveLastAction(MethodBase.GetCurrentMethod(), getCurrentStatus(), item, /*loadFresh*/ false);

最後のアクションをナビゲートして更新することができます

    public void Refresh(bool loadFresh = true)
    {
        if (!isInitialized) return;

        try
        {
            lastStatus = getCurrentStatus();

            var parameters = lastActionsParameters.Pop();
            var method = lastActions.Pop();

            //Set the load Fresh parameter to True
            parameters[method.GetParameters().First(pi => pi.Name == "loadFresh").Position] = loadFresh;

            //Invoke the Method again with the adopted parameters
            method.Invoke(this, parameters);

        }
        catch
        {
        }
    }

saveLastAction を呼び出すメソッドの 1 つを非同期に変更するまで、私は完全に機能しました。それ以来、MethodBase.GetCurrentMethod()呼び出した実際の関数ではなく、MoveNext 関数のみを返します。

保存時でも呼び出し時でも、呼び出された関数の実際の MethodBase オブジェクトにアクセスする方法はありますか。

よろしくお願いします

4

3 に答える 3

2

ちょっとしたヘルプ機能を作成しました:

private MethodInfo getMethodBase(object caller, [CallerMemberName]string methodName = "")
    {
        //Binding Flags to include private functions
        return caller.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
    }

params パラメータも使用していたため、CallerMemberNameAttribute を直接使用しても機能しませんでした。最終的には、Peters のアプローチと非常によく似ています。

于 2015-01-27T13:20:04.970 に答える