2014-07-25 341 views
5

我有一個很大的C#類,它只有public const string字段。然而,在一個情況下,我試圖將字符串和一個枚舉值轉換成const string場,就像這樣:連接常量字符串和枚舉

public const string GET_VALUES = "SELECT * FROM [tbl] WHERE [id] = " + Enum.Val; 

不過,我得到這個編譯器錯誤:

'Namespace.SqlStatements.GET_VALUES' must be constant 

我知道我可以放棄const條款,但我想保持此類中的所有字段一致。是否有可能在C#中連接一個常量字符串和枚舉?

+4

你可以使用'public readonly' ...你不能使用'const',因爲在編譯的時候必須知道一個const字符串。使用枚舉值進行字符串連接需要對該枚舉值進行字符串轉換 - 這些操作在運行時發生,而不是在編譯程序期間發生。 – elgonzo

+0

@elgonzo好主意,但這不太符合我提到的一致性,我試圖保持。如果沒有其他辦法,那麼'只讀'就是要走的路。 –

+1

我擴展了我的第一條評論。在這種情況下,請參閱爲什麼不能使用'const' ... – elgonzo

回答

5

從MSDN:

A constant expression is an expression that can be fully evaluated at compile time. Therefore, the only possible values for constants of reference types are string and a null reference.

在你的情況下,枚舉將被轉換爲使用ToString一個字符串,它是不可能在編譯時。我建議你把它改爲readonly,就像elgonzo提到的那樣。

+0

但是,我沒有在枚舉上調用'ToString()',我正在尋找它的整數值。所以枚舉值不能在編譯時解決? –

+0

嗯,這是編譯器隱含的。 – Chris

+0

好的!聽起來不錯。謝謝! –