使用已指定的参数传递方法调用

时间:2014-10-18 19:12:32

标签: c# .net

我想调用一个方法A,其参数已经从另一个方法指定。 所以我想将方法​​调用和参数作为参数传递给MethodB,一旦它完成了一些处理,就用指定的参数调用MethodA。

我知道我可以将调用作为一个方法B作为委托参数传递,然后也传递这样的参数:

static void Main( string[] args )
        {
            MethodB(1, 2, Add);

            Console.ReadLine();
        }

        public static void Add(int i, int j)
        {
            Console.WriteLine(i+j);
        }

static public class DelegateWithDelegateParameter
    {
        public static void MethodB(int param1, int param2, Action<int, int> dAction)
        {
            dAction(param1, param2);
        }
    }

想知道,如果可以使用已经指定的参数执行此操作,而不必将参数ParamA,ParamB传递给MainB中指定的方法B.只是想知道。希望这有意义,如果您想了解更多细节,请告诉我。

3 个答案:

答案 0 :(得分:3)

如果我按照您的要求进行操作,要获得您想要的内容,您需要将您的呼叫包含在一个包含其参数的代理中。使用lamda语法很容易做到这一点:

static void Main( string[] args )
{
    MethodB(() => Add(1, 2));

    Console.ReadLine();
}

public static void Add(int i, int j)
{
    Console.WriteLine(i+j);
}

static public class DelegateWithDelegateParameter
{
    public static void MethodB(Action dAction)
    {
        dAction();
    }
}

声明() => Add(1,2)创建了一个新的Action委托,其定义为使用参数Add()调用1,2

答案 1 :(得分:0)

我认为你想要的是:

static object InvokeMethod(Delegate method, params object[] args){
    return method.DynamicInvoke(args);
}

static int Add(int a, int b){
    return a + b;
}

static void Test(){
    Console.WriteLine(InvokeMethod(new Func<int, int, int>(Add), 5, 4));
}

答案 2 :(得分:0)

您可以通过委托来完成。首先声明一个委托并将方法挂钩到

public delegate void adddelegate(int a, int b);
class Program
{
    static void Main(string[] args)
    {
        adddelegate adddel = new adddelegate(Add);

        DelegateWithDelegateParameter.MethodB(1, 2, adddel);

        Console.ReadLine();
    }

    public static void Add(int i, int j)
    {
        Console.WriteLine(i + j);
    }
}

static public class DelegateWithDelegateParameter
{
    public static void MethodB(int param1, int param2, adddelegate dAction)
    {
        dAction(param1, param2);
    }
}