2012-05-21 255 views
0

使用對象的字符串變量我試圖找出爲什麼我得到這個錯誤:在switch語句

switch (token.type.GetName()) 
    { 
     case PascalTokenType.BEGIN.name: // ERROR: A CONSTANT VALUE IS EXPECTED 
     { 
      CompoundStatementParser compoundParser = new CompoundStatementParser(this); 
      statementNode = compoundParser.parse(token); 
      break; 
     } 
    } 

GetName()name返回字符串。這是對象的樣子:

public static readonly PascalTokenType BEGIN = new PascalTokenType("BEGIN"); 

我知道我可以通過它更改爲if語句解決這個問題,但是當這是完整的,我將有至少20條件,所以我寧願不。我想這是因爲BEGIN.name直到運行時才分配?

+1

如果您知道條件提前(我的部分是大假設),爲什麼不創建一個枚舉並根據它進行比較? – Killnine

+0

因此,將枚舉傳遞給'PascalTokenType'構造函數而不是字符串? –

回答

3

是的,你有正確的想法。問題是這個值可能在運行時改變,編譯器不喜歡。

+0

一旦'BEGIN'創建,它永遠不會改變。有沒有辦法用編譯器在切換條件下接受的不可變成員創建一個不可變對象? –

+0

這是不夠的,你知道它不會改變。這是編譯器不知道它不會改變。可能有一些解決方法,但我發現當我試圖在一個圓孔中安裝一個方形釘時,我通常會接近錯誤的問題。 – Killnine

+0

而不是'PascalTokenType.BEGIN.name'我只打算'「BEGIN」'。似乎是最直接的方式,而不必將其重寫爲「if-else」。 –