2013-01-14 11 views
6

Kiedy chcę użyć dwukropka ":" w instrukcji zmiany łańcucha znaków, otrzymuję komunikat "nieokreślony ciąg literowy", jak mogę naprawić to i dlaczego powoduje błąd?Przełącznik łańcuchów w języku Razor ze znacznikiem dwukropka w przypadku instrukcji powoduje błąd "nieokreślony ciąg literalny"

Kod:

@switch (stringText) 
{ 
    case "aaaa:ggg": 
     Do something... 
     break; 
    case "bbbb:ggg": 
     Do something else... 
     break; 
} 

Jeśli ustalone to w ten sposób, ale nie uważają, że jest to dobre rozwiązanie:

const string extra = ":ggg"; 
@switch (stringText) 
{ 
    case "aaaa" + extra: 
     Do something... 
     break; 
    case "bbbb" + extra: 
     Do something else... 
     break; 
} 

EDIT: składnia MVC Razor są wykorzystywane

+2

Które kompilatora? (Działa dobrze w LINQPad, więc sprawdź otoczenie.) –

+4

Czy to jest szablon Razor? Może to być błąd w parserze szablonów ... –

+0

Możesz spróbować użyć znaku @ przed ciągami znaków, np. Case @ "aaaa: ggg": – Maarten

Odpowiedz

4

Jak o tym, czy definiujesz wartości jako stałe w klasie narzędziowej, a następnie odwołujesz się do tych stałych zamiast literałów łańcuchowych w instrukcji switch?

class Constants 
{ 
    public const string Aaaa = "aaaa:gggg"; 
    public const string Bbbb = "bbbb:gggg"; 
} 

...

@switch (stringText) 
{ 
    case Constants.Aaaa: 
     Do something... 
     break; 
    case Constants.Bbbb: 
     Do something else... 
     break; 
} 
+0

Czyste rozwiązanie pracy, dzięki! – Kevin

3

Weird bug.

Oto kolejne obejście problemu: jeśli nie chcesz definiować stałych, możesz użyć sekwencji specjalnej \x3A, aby uzyskać dwukropki w literałach łańcuchów, w sposób, który nie koliduje z kontrolerem składni maszynki do golenia.

W twoim przypadku, kod może być:

@switch (stringText) 
{ 
    case "aaaa\x3Aggg": 
     Do something... 
     break; 
    case "bbbb\x3Aggg": 
     Do something else... 
     break; 
} 
+0

Wygląda na to, że nie działa – Kevin

+0

Przetestowałem go i wygląda na to, że działa dobrze. Zgadzam się, że nie jest tak czytelny, jak rozwiązanie z udziałem stałych. Ale tylko z ciekawości: co nie działa? – GolfWolf