将函数转换为变量

PKK

让以下函数Measure测量某些函数的执行时间method

public static TimeSpan Measure(Action method)
{
    var stopwatch = new Stopwatch();
    stopwatch.Start();
    method.Invoke();
    stopwatch.Stop();
    return stopwatch.Elapsed;
}

此方法由以下代码行启动

var ExecTime = ComplexityCounters.Measure(() => method(int a, int b));

正如我们所看到的,这是一个非常大的回忆Measure,所以,让我们尝试通过以下函数来缩短它

public static TimeSpan ExecTime (Action method)
{
   var ExecutionTime = Measure(() => method.Invoke());
   return ExecutionTime;
}

var ExecTime = ExecTime(method(int a, int b));

给出错误 c# cannot convert from 'void' to 'System.Action'。如何解决?或者有没有办法将这两个功能合二为一?

哈立德·萨米尔

这里完整的例子

public static TimeSpan Measure(Action method)
    {
        var stopwatch = new Stopwatch();
        stopwatch.Start();
        method.Invoke();
        stopwatch.Stop();
        return stopwatch.Elapsed;
    }

    public static TimeSpan ExecTime(Action method)
    {
        var ExecutionTime = Measure(() => method.Invoke());
        return ExecutionTime;
    }

    private static void Main(string[] args)
    {
        var spentTime = ExecTime(() => Sum(1,2));
    }

    public static int Sum(int t1, int t2)
    {
        return t1 + t2;
    }

实际上,您正在声明您的变量ExecTime与您的方法名称相同ExecTime

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章