将方法作为方法参数调用但不执行?

时间:2014-08-20 11:04:19

标签: c# .net methods delegates func

您好我正在尝试实现一种方法,该方法将一个方法(在宏观方案中的任何方法)作为参数。我希望在仅调用它的方法中运行此参数方法,如果传入此方法的方法具有返回值,那么它仍然应该能够返回其值。

我想测量传入方法的性能。

return Performance(GetNextPage(eEvent, false));

public static T Performance<T>(T method)
{
    T toReturn;
    Stopwatch sw = Stopwatch.StartNew();
    toReturn = method;
    sw.Stop();
    Debug.WriteLine(sw.Elapsed.ToString());
    return toReturn;
}

我尝试过使用Action几乎可以使用它的方式

public static TimeSpan Measure(Action action)
{
    Stopwatch sw = Stopwatch.StartNew();
    action();
    sw.Stop();
    return sw.Elapsed;
}

var dur = Measure(() => GetNextPage(eEvent, false));

问题是action()返回void所以我无法按照我想要的方式使用它。

我查看了Func,但我不知道如何通过传递Performance方法运行我的GetNextPage方法。

1 个答案:

答案 0 :(得分:1)

您需要将Func<T>传递给Performance

public static T Performance<T>(Func<T> func)
{
    T toReturn;
    Stopwatch sw = Stopwatch.StartNew();
    toReturn = func();
    sw.Stop();
    Debug.WriteLine(sw.Elapsed.ToString());
    return toReturn;
}

我认为您还需要使用单独的Measure方法来处理不返回值的方法,并接受目前的Action

您对Performance的来电变为:

return Performance(() => GetNextPage(eEvent, false));

eEventfalse成为关闭的一部分,因此它只是获取并返回GetNextPage的返回结果。