2014-07-25 191 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

好的!听起来不错。谢谢! –