2013-01-14 14 views
6

Wenn ich einen Doppelpunkt ":" in meinem String Switch Case-Anweisung verwenden möchte, bekomme ich den Fehler "nicht abgeschlossen String-Literal", wie kann ich beheben Dies und warum gibt es den Fehler?String wechseln in Razor Markup mit Doppelpunkt in Case-Anweisung verursacht Fehler "nicht abgeschlossen String-Literal"

Code:

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

Wenn es fest, indem Sie diese es aber nicht, eine gute Lösung finden:

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

EDIT: MVC Razor-Syntax verwendet

+2

Welche Compiler? (Es funktioniert gut in LINQPad; also überprüfen Sie die Umgebung.) –

+4

Ist dies eine Razor-Vorlage? Es könnte ein Fehler im Template-Parser sein ... –

+0

Sie können versuchen, das @ -Zeichen vor den Strings zu verwenden, wie case @ "aaaa: ggg": – Maarten

Antwort

4

Wie wäre es, wenn Sie definieren Werte als Konstanten in einer Utility-Klasse und verweisen dann auf diese Konstanten anstatt String-Literale in der switch-Anweisung?

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

Saubere Arbeitslösung, danke! – Kevin

3

Weird-Fehler.

Hier ist eine weitere Problemumgehung: Wenn Sie keine Konstanten definieren möchten, können Sie die Escape-Sequenz \x3A verwenden, um Doppelpunkte in Ihren Zeichenfolgenliteralen zu erhalten, ohne die Rasierer-Syntaxprüfung zu beeinträchtigen.

In Ihrem Fall könnte der Code sein:

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

Scheint nicht zu funktionieren – Kevin

+0

Ich habe es getestet und scheint gut zu funktionieren. Ich stimme zu, dass es nicht so gut lesbar ist wie die Lösung mit Konstanten. Aber nur aus Neugier: Was geht nicht? – GolfWolf