Предположим, что существует следующий код:
private static int DoSwitch(string arg)
{
switch (arg)
{
case "a": return 0;
case "b": return 1;
case "c": return 2;
case "d": return 3;
}
return -1;
}
private static Dictionary<string, Func<int>> dict = new Dictionary<string, Func<int>>
{
{"a", () => 0 },
{"b", () => 1 },
{"c", () => 2 },
{"d", () => 3 },
};
private static int DoDictionary(string arg)
{
return dict[arg]();
}
Повторяя оба метода и сравнивая, я получаю, что словарь немного быстрее, даже когда "a", "b", "c", "d" расширяется, чтобы включить больше ключей. Почему это так?
Это связано с циклической сложностью? Это потому, что джиттер компилирует операторы return в словаре на собственный код только один раз? Это потому, что поиск словаря - O (1), который может быть не так для оператора switch? (Это просто догадки)