L'uso della reflection è sicuramente più lento di un semplice switch, visto che è una delle caratteristiche meno efficienti del .NET Framework.
Piuttosto associa ad ogni elemento un delegate:
codice:
using System.Collections.Generic;
delegate void tuoDelegato();
//...
class TuaClasse
{
public static void TuoMetodo1()
{
//codice
}
//...
public void TuoMetodo2()
{
//codice
}
}
//...
Dictionary<string, tuoDelegato> hashTable = new Dictionary<string, tuoDelegato>;
//esempio con un metodo statico
hashTable.Add("chiave1", new tuoDelegato(TuaClasse.TuoMetodo1));
//esempio con un metodo d'istanza
TuaClasse tc = new TuaClasse;
hashTable.Add("chiave2", new tuoDelegato(tc.TuoMetodo2));
//...
hashTable["chiave1"](); //chiama TuaClasse.TuoMetodo1
hashTable["chiave2"](); //chiama tc.TuoMetodo2
.
L'uso dei delegate tra l'altro è quanto di più vicino a quanto avevi chiesto all'inizio, dato che un delegate è un puntatore a metodo "sicuro" (dato che ne ricorda la signature e consente di chiamarlo solo in modo corretto).