Should you change all your C# code to use Func invocations? This might decrease performance—using classic constructs like switch may be faster.
using System;
using System.Diagnostics;
class Program
{
const int _max = 10000000;
static void Main()
{
// A Func lookup table.
var lookup = new Func<int, int>[]
{
a => a + 10,
a => a + 20,
a => a + 30
};
// Version 1: use Func table.
var s1 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
if (Version1(lookup, i) == -1)
{
return;
}
}
s1.Stop();
// Version 2: use switch.
var s2 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
if (Version2(i) == -1)
{
return;
}
}
s2.Stop();
Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000000) / _max).ToString(
"0.00 ns"));
Console.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000000) / _max).ToString(
"0.00 ns"));
}
static int Version1(Func<int, int>[] lookup, int i)
{
// Use lookup table.
return lookup[i % 3](i);
}
static int Version2(int i)
{
// Use switch.
switch (i % 3)
{
default:
case 0:
return i + 10;
case 1:
return i + 20;
case 2:
return i + 30;
}
}
}
2.82 ns Func lookup table
5.36 ns Switch