gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:45:57 26 4
gpt4 key购买 nike

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

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

    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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com