c# - C# 中的泛型函数声明

标签 c# generics

我正在尝试创建一些关于库中方法调用持续时间的统计信息。 我不想用时间线包装对库的每个方法调用并跟踪它,而是想创建一个通用操作和函数来执行这些重复步骤。

例如对于不返回值的方法,我创建了这个:

    private readonly Action<string, Action> timedAction = (name, action) =>
    {
        var sw = Stopwatch.StartNew();
        action.Invoke();
        trackDuration(name, sw.ElapsedMilliseconds);
    };

可以用 timedAction("methodname", () => lib.methodname()) 调用。

我想对返回值的方法做一些类似的事情,但显然 Action 不能用于该目的,因为它不能返回值。

有没有办法用通用的 Func 来做到这一点,这样我就不必为库方法参数的每个组合都声明一个?

最佳答案

您可以使用这样的通用函数:

private static TValue FuncHandler<TValue>(string name, Func<TValue> func)
{
    var sw = Stopwatch.StartNew();
    var result = func();

    trackDuration(name, sw.ElapsedMilliseconds);

    return result;
}

这样调用它:

var result = FuncHandler("name", () => MyMethod(param1));

关于c# - C# 中的泛型函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40255767/

相关文章:

c# - 当我尝试构建它时,Visual Studio 执行了一些操作。我如何找出留在这背后的代码?

java - 用java实现有界泛型

Java - 返回特定类型 T 的所有对象的集合,其中 T 被传递给方法

swift - 通用方法导致 "cannot pass immutable value of type AnyObject? as inout argument"

c# - 如何处理类型未知且无关紧要的通用字典?

c# - 为什么我们*应该*使用 EventHandler

c# - 将库嵌入我的应用程序并使其使用该库

c# - 编辑 Xml 文件时 SelectSingleNode 不工作

C#:通过电子邮件发送支持请求的最佳方法是什么?

c# - 在 C# 中,如何可靠地终止进程树