如何访问 Func/Action 委托参数值?
How to access Func/Action delegate parameter values?
我正在编写一个方法来对其他方法进行一些测量
像这样,这个例子按预期运行:
public void RunMethodWithMeasurementsOn(Action actionToMeasure)
{
//some stuff here
actionToMeasure(); //call method execution
//some stuff here
}
//method call would be:
RunMethodWithMeasurementsOn(new Action(actionToMeasure));
但我还需要使用参数
为methods/procedures工作
例如
public void RunMethodWithMeasurementsOn(Action<int> actionToMeasure)
{
//stuff...
**how can I call actionToMeasure with it's parameters here?**
//stuff...
}
我想我可以像这样做这个测量方法:
public void RunMethodWithMeasurementsOn(Action<int> actionToMeasure, int parameter)
{
//do stuff
actionToMeasure(parameter);
//do stuff
}
但这意味着我的函数调用会像这样
RunMethodWithMeasurementsOn(new Action<int>(actionToMeasure), parameterValue);
但我更愿意这样称呼它
RunMethodWithMeasurementsOn(new Action<int>(actionToMeasure(parameterValue));
这可能吗?
是的,你可以这样做:
RunMethodWithMeasurementsOn(MethodWithNoParams);
RunMethodWithMeasurementsOn(() => { MethodWithOneParam(5); });
public void MethodWithNoParams()
{
Console.WriteLine("MethodWithNoParams");
}
public void MethodWithOneParam(int a)
{
Console.WriteLine("MethodWithOneParam: " + a);
}
并保持原样:
public void RunMethodWithMeasurementsOn(Action actionToMeasure)
{
//some stuff here
actionToMeasure(); //call method execution
//some stuff here
}
诀窍是:你传递给它一个匿名函数,没有参数,它本身调用参数化方法。
你必须这样传递:
public void Foo(Action<int> action, int parameter)
{
action(parameter);
}
第一个参数不包含操作的参数。它是唯一将被执行的代码。所以你必须以其他方式提供这个参数。
我正在编写一个方法来对其他方法进行一些测量
像这样,这个例子按预期运行:
public void RunMethodWithMeasurementsOn(Action actionToMeasure)
{
//some stuff here
actionToMeasure(); //call method execution
//some stuff here
}
//method call would be:
RunMethodWithMeasurementsOn(new Action(actionToMeasure));
但我还需要使用参数
为methods/procedures工作例如
public void RunMethodWithMeasurementsOn(Action<int> actionToMeasure)
{
//stuff...
**how can I call actionToMeasure with it's parameters here?**
//stuff...
}
我想我可以像这样做这个测量方法:
public void RunMethodWithMeasurementsOn(Action<int> actionToMeasure, int parameter)
{
//do stuff
actionToMeasure(parameter);
//do stuff
}
但这意味着我的函数调用会像这样
RunMethodWithMeasurementsOn(new Action<int>(actionToMeasure), parameterValue);
但我更愿意这样称呼它
RunMethodWithMeasurementsOn(new Action<int>(actionToMeasure(parameterValue));
这可能吗?
是的,你可以这样做:
RunMethodWithMeasurementsOn(MethodWithNoParams);
RunMethodWithMeasurementsOn(() => { MethodWithOneParam(5); });
public void MethodWithNoParams()
{
Console.WriteLine("MethodWithNoParams");
}
public void MethodWithOneParam(int a)
{
Console.WriteLine("MethodWithOneParam: " + a);
}
并保持原样:
public void RunMethodWithMeasurementsOn(Action actionToMeasure)
{
//some stuff here
actionToMeasure(); //call method execution
//some stuff here
}
诀窍是:你传递给它一个匿名函数,没有参数,它本身调用参数化方法。
你必须这样传递:
public void Foo(Action<int> action, int parameter)
{
action(parameter);
}
第一个参数不包含操作的参数。它是唯一将被执行的代码。所以你必须以其他方式提供这个参数。