我正在写这样的代码,做一些快速而肮脏的计时:

var sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000; i++)
{
    b = DoStuff(s);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

当然,有一种方法可以将这种时序代码称为花哨的.NET 3.0 lambda,而不是(上帝禁止)将其剪切和粘贴几次并将 DoStuff(s) 替换为 DoSomethingElse(s) 吗?

我知道它可以作为Delegate完成,但我想知道lambda方式。

最佳答案

如何扩展码表类?

public static class StopwatchExtensions
{
    public static long Time(this Stopwatch sw, Action action, int iterations)
    {
        sw.Reset();
        sw.Start();
        for (int i = 0; i < iterations; i++)
        {
            action();
        }
        sw.Stop();

        return sw.ElapsedMilliseconds;
    }
}

然后这样称呼它:
var s = new Stopwatch();
Console.WriteLine(s.Time(() => DoStuff(), 1000));

您可以添加另一个重载,该重载忽略“iterations”参数,并使用一些默认值(例如1000)调用此版本。

关于c# - 用委托(delegate)或lambda包装秒表计时?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/232848/

10-10 19:48