2013-02-26 85 views
2

据我所知,"H" + 'i'的连接产生一个常量字符串。
我或C#错了吗?为什么不能将常量字符串分配给常量字符串类型?

代码:

const string b = "H" + 'i'; 
// Error : The expression being assigned to 'b' must be constant 

这是否算作一个错误或功能?

+0

您不会添加两个字符串,而是一个字符串和一个字符。 – ChrisF 2013-02-26 20:07:42

+0

char不是一个字符串,因此它不是一个常量。这将工作:'const string b =“H”+“ i”;' – 2013-02-26 20:08:05

回答

7

这是一个微妙之处。

'i'char字面值。
将其添加到字符串涉及装箱转换(要按规范中的规定,请致电string operator +(string x, object y)),它不是一个常量表达式。请参阅我的earlier answer

0

也许VS2010错误将帮助定义它:

Constant initializer must be compile-time constant 

因此 “H” + 'i' 是一个运行值。

+0

这并不能解释为什么。 '“H”+“i”'很好。 – SLaks 2013-02-26 20:09:34

+0

@SLaks,真的,我喜欢你的“早期答案”,它对此进行了深入的解释。 – 2013-02-26 20:11:50