C#将泛型函数作为参数传递

C#将泛型函数作为参数传递,c#,.net,generics,C#,.net,Generics,我正在尝试从应用程序内部审核方法调用,以便能够分析和分析参数。我让它工作 Run( ()=> SomeFunction(paramA, paramB), paramA, paramB) ); public static void Run(Expression<Action> action, params object[] param) { var func = action.Compile(); func(); } public static T Run<

我正在尝试从应用程序内部审核方法调用,以便能够分析和分析参数。我让它工作

Run( ()=> SomeFunction(paramA, paramB), paramA, paramB) );

public static void Run(Expression<Action> action, params object[] param)
{
   var func = action.Compile();
   func();
}

public static T Run<T>(Expression<Func<T>> action, params object[] param)
{
   var func = action.Compile();
   return func();
}
我到了这里,但我被难住了,万一有人能帮我:

private T Run<T>(Func<T> subReturn) {}
private T Run(Func子返回){

我不知道您到底想要什么,但如果我理解正确,这可能会有所帮助:

private T Run<T, TLeft, TRight>(Func<TLeft, TRight, T> action, TLeft leftParam, TRight rightParam)
{
    return action(leftParam, rightParam);
}
private T Run(函数操作、TLeft leftParam、TRight rightParam)
{
返回操作(leftParam、rightParam);
}

您没有使用传递到
Run
方法中的
param
。这是故意的吗?你能详细说明你所说的“配置和分析参数”是什么意思吗?你有多少不同的功能,参数的数量/类型有多少变化?但更奇怪的是,为什么你认为<代码>运行(Faunc,PARMA,PARAMB)< /> >比<代码>运行更容易使用(())= FunFoc(PARAMA,PARAMB)< <代码>?正如其他人指出的,您不需要两次传递参数,它们已经作为
表达式的一部分存在了,虽然你需要解析它来提取它们。你可以在这里找到一些关于C#截取的信息:通过计算表达式来提取参数很好地避免了“Run”上的冗余参数谢谢!!这是正确的——通过
Func
再为
Func
添加16个重载,通过
Action
再为
Action
添加17个左右的重载,这样你就可以享受一杯冰镇啤酒了。这是您需要的。使用
Func
意味着您丢失了
Expression
捕获的信息,包括函数名等。老实说,我甚至不知道他想要实现什么。@Sean如果您在其中添加该段落,您的问题会有所改进。如果单词解释了有关问题的一些重要内容,那么就没有“太罗嗦”这种说法。@DylanNicholson一个简单的方法名(“方法组”)不会像对普通委托类型那样隐式转换为
表达式。因此,如果您希望能够执行
var r=Run(SomeMethod)
其中
SomeMethod
是C#方法的名称,它不能与
表达式一起工作。您将被迫
var r=Run(()=>SomeMethod())在这种情况下。
private T Run<T, TLeft, TRight>(Func<TLeft, TRight, T> action, TLeft leftParam, TRight rightParam)
{
    return action(leftParam, rightParam);
}