我有这段代码,它接受一个没有参数的函数,并返回它的运行时。
public static Stopwatch With_StopWatch(Action action)
{
var stopwatch = Stopwatch.StartNew();
action();
stopwatch.Stop();
return stopwatch;
}
我想将其转换为带参数的非void函数。 我听说过Func<>代表,但我不知道如何使用它。 我需要这样的东西(非常伪):
public T measureThis(ref Stopwatch sw, TheFunctionToMeasure(parameterA,parameterB))
{
sw.Start(); // start stopwatch
T returnVal = TheFunctionToMeasure(A,B); // call the func with the parameters
stopwatch.Stop(); // stop sw
return returnVal; // return my func's return val
}
所以我必须得到传递的func的返回值,并在最后得到秒表。 非常感谢任何帮助!
答案 0 :(得分:8)
您的原始代码仍然可以使用。当你有参数时,人们如何称呼它会发生什么变化:
With_Stopwatch(MethodWithoutParameter);
With_Stopwatch(() => MethodWithParameters(param1, param2));
您也可以使用带有第二种语法的参数调用该方法:
With_Stopwatch(() => MethodWithoutParameter());
With_Stopwatch(() => MethodWithParameters(param1, param2));
更新:如果您想要返回值,可以将measureThis
函数更改为Func<T>
而不是操作:
public T measureThis<T>(Stopwatch sw, Func<T> funcToMeasure)
{
sw.Start();
T returnVal = funcToMeasure();
sw.Stop();
return returnVal;
}
Stopwatch sw = new Stopwatch();
int result = measureThis(sw, () => FunctionWithoutParameters());
Console.WriteLine("Elapsed: {0}, result: {1}", sw.Elapsed, result);
double result2 = meashreThis(sw, () => FuncWithParams(11, 22));
Console.WriteLine("Elapsed: {0}, result: {1}", sw.Elapsed, result);