Generic function declaration in C#
c#, generics
Solution
You can use a generic function like this:
private static TValue FuncHandler<TValue>(string name, Func<TValue> func)
{
var sw = Stopwatch.StartNew();
var result = func();
trackDuration(name, sw.ElapsedMilliseconds);
return result;
}
Call it like this:
var result = FuncHandler("name", () => MyMethod(param1));
Problem
I'm trying to create some stats about method call duration in a library. Instead of wrapping each method call to the library with lines to time and track it, I want to create a generic action and function which does these recurring steps. E.g. for methods that don't return a value, I have created this: ``` private readonly Action<string, Action> timedAction = (name, action) => { var sw = Stopwatch.StartNew(); action.Invoke(); trackDuration(name, sw.ElapsedMilliseconds); }; ``` That can be invoked with `timedAction("methodname", () => lib.methodname())`. I want to do something similar for methods that return a value, but obviously `Action` can't be used for that purpose, since it can't return a value. Is there a way to do this with a generic `Func`, so I don't have to declare one for each combination of library method parameters?