Erstellen Delegierten dynamisch mit dem parameter-Namen

Hallo, ich versuche eine Funktion erstellen, die dynamisch erstellt einen Delegaten mit der gleichen Rückgabewert und die gleichen Parameter wie eine MethodInfo-es erhält als parameter und auch und dies ist sehr wichtig, den gleichen Parameternamen!

Was ich Tat, so weit ist erstellen Sie eine Funktion zurückgibt, die einen lambda-Ausdruck, der erhält die gleichen parameter-Typen und hat denselben Rückgabewert wie die MethodInfo-aber es muss nicht die Namen der parameter:

    static void Example()
    {
        Person adam = new Person();
        MethodInfo method = typeof(Person).GetMethod("Jump");
        Delegate result = CreateDelegate(adam, method);
        result.DynamicInvoke((uint)4, "Yeahaa");
    }

    private static Delegate CreateDelegate(object instance, MethodInfo method)
    {
        var parametersInfo = method.GetParameters();
        Expression[] expArgs = new Expression[parametersInfo.Length];
        List<ParameterExpression> lstParamExpressions = new List<ParameterExpression>();
        for (int i = 0; i < expArgs.Length; i++)
        {
            expArgs[i] = Expression.Parameter(parametersInfo[i].ParameterType, parametersInfo[i].Name);
            lstParamExpressions.Add((ParameterExpression)expArgs[i]);
        }

        MethodCallExpression callExpression = Expression.Call(Expression.Constant(instance), method, expArgs);
        LambdaExpression lambdaExpression = Expression.Lambda(callExpression, lstParamExpressions);

        return lambdaExpression.Compile();
    }

    private class Person
    {
        public void Jump(uint height, string cheer)
        {
            Console.WriteLine("Person jumped " + height + " "+ cheer);
        }
    }

Hat jemand irgendwelche Vorschläge, wie ich das tun kann?
Um deutlich zu machen, der Grund, mich interessieren die Namen der parameter ist, so wäre ich in der Lage zu aktivieren die Delegierten mit den parameter-Namen, so könnte ich es nennen, wie dies (cheer="YAY!', Höhe=3)
(Meine Anwendung ist integriert mit Python, das ist, wie ich in der Lage sein, es zu tun, ohne DynamicInvoke und das ist auch der Grund, warum die Namen der parameter sind so wichtig
und auch, warum ich schrieb '=' und nicht ':')

Schreibe einen Kommentar