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);
}