2012-12-05 21 views
5

Wiem, że instrukcje przełączników nie są dostępne w CodeDom i jak kompilatory radzą sobie z instrukcją przełącznika.Instrukcja przełączania w codeDom (styl tabeli skoku)

Więc ze względu na wydajność, gdy są obecne w wielu przypadkach, nie chcę używać if-else
Why the switch statement and not if-else?

Czy jest możliwe, aby wygenerować kod do symulacji tabelę skoku dla danej listy case.

switch(value) { 
    case 0: return Method0(); 
    case 1: return Method1(); 
    case 4; return Method4(); 
} 

przyniosłoby:

private delegate object Method(); 

    Method[] _jumpTable = new Method[] { Method0, Method1, null, null, Method4 }; 

    private object GetValue(int value) 
    { 
     if (value < 0 || value > 4) 
      return null; 
     return _jumpTable[value](); 
    } 

Jaki jest najlepszy sposób, aby analizować Wokanda i wygenerować tablicę jeśli tam są dziury w sekwencji lub lista jest rzadki?

Odpowiedz

2

Możesz chcieć rzucić okiem na The Roslyn Project dla anaylsis kodu. Jeśli tabela jest duża i szczególnie rzadka, to/else może być lepsza (biorąc pod uwagę współczesne pamięci podręczne procesora). Roslyn powinna pozwolić ci chodzić w DOM i zdobyć wartości, które mogą być następnie sortowane (być może w pojedynczym linq stmt). Wierzę, że masz na myśli "zepsucie się" w swoim przełączniku powyżej. Jeśli zaimplementujesz coś takiego, przetestowałbym to bardzo ostrożnie, aby upewnić się, że faktycznie poprawia wydajność.