Dictionnaire avec délégué ou d'un commutateur?

Je suis en train d'écrire un analyseur syntaxique qui appelle certaines fonctions dépendent de la valeur.

Je peux mettre en œuvre cette logique avec interrupteur simple comme ceci:

switch(some_val)   
{   
    case 0:   
        func0();   
        break;   
    case 1:   
        func1();   
        break;   
}     

ou avec les délégués et un dictionnaire comme ceci:

delegate void some_delegate();   
Dictionary<int, some_delegate> some_dictionary = new Dictionary<int, some_delegate>();   
some_dictionary[0] = func0;   
some_dictionary[1] = func1;   

some_dictionary[some_value].Invoke();    

Sont ces deux méthodes sont équivalentes et qui est préférée?