如何在C#中的方法中调用Func <int,int,int>参数?</int,int,int>

时间:2014-10-21 06:34:13

标签: c# func actionmethod

我正在尝试创建一个接受不同方法(Func s)作为参数的方法 我在定义Func参数时遇到了一个小问题。 假设我需要调用这样的东西:

public static void SomeTestMethod(int number,string str)
{
    Check(MethodOne(number,str));
}

对于Check我有这个:

public static int Check(Func<int,string,int> method)
{
         // some conditions 
      method(where should i get the arguments ?);
}

现在我的问题是我应该如何设置所需的参数?我觉得为Check提供单独的参数,并不优雅,因为我需要使用TestMethod中提供的签名来调用Check。 我不想拥有

Check(MethodOne,arg1,arg2,etc));  

如果可能,我需要提供此签名:

Check(MethodOne(number,str));

2 个答案:

答案 0 :(得分:2)

你想要这个:

public static void SomeTestMethod(int number,string str)
{
    Check( () => MethodOne(number,str));
}

public static int Check(Func<int> method)
{
         // some conditions 
      return method();
}

答案 1 :(得分:1)

public static void Check<TReturnValue>(
                       Func<int, string, TReturnValue> method, 
                       int arg1, 
                       string arg2)
{
    method(arg1, arg2);
}

主叫:

public static SomeClass MethodOne(int p1, string p2)
{
   // some body
}

Check(MethodOne, 20, "MyStr");

您错过了返回值的类型(最后一个通用参数表示返回值的类型)。如果您不想Func返回任何内容,请使用Action

public static void Check(
                       Action<int, string> method, 
                       int arg1, 
                       string arg2)
{
    method(arg1, arg2);
}