Вы не можете сделать это так, как хотите, но можете достичь той же цели:
public static class MethodTimer
{
public static long Run(Action action)
{
var sw = System.Diagnostics.Stopwatch.StartNew();
action();
sw.Stop();
return sw.ElapsedMilliseconds;
}
}
class Program
{
static void Main(string[] args)
{
long time = MethodTimer.Run(() => File.Open(@"c:\test.txt",
FileMode.CreateNew));
Console.WriteLine(time);
Console.ReadLine();
}
}
Вы можете даже определить это как метод расширения, чтобы ваш код мог быть:
Action act = () => File.Open(@"c:\test.txt", FileMode.CreateNew);
time=act.Time();
Этот метод будет определен как:
public static class MethodTimer
{
public static long Time(this Action action)
{
var sw = System.Diagnostics.Stopwatch.StartNew();
action();
sw.Stop();
return sw.ElapsedMilliseconds;
}
}
Редактировать
Вам не нужно определять какие-либо новые методы, в этом подходе используется замыкание вокруг метода, который вы хотите определить по времени. Итак:
MethodTimer.Time(()=> File.Open("",FileMode.Open);
MethodTimer.Time(()=> myObject.TestMethod(123,1231,"another param"));
И так далее, и тому подобное.