为什么不能将常量字符串赋值给常量字符串类型?

3
据我所知,"H" + 'i'的连接会产生一个常量字符串。
我或者C#错了吗?

代码:

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

这算是一个 bug 还是一个功能?

你不是在加两个字符串,而是一个字符串和一个字符。 - ChrisF
一个char不是字符串字面值,因此它不是一个常量。这个可以工作:const string b = "H" + "i"; - Tim Schmelter
2个回答

8

这是一个微妙之处。

'i' 是一个 char 字面量。
将它添加到字符串中需要进行装箱转换(调用规范中指定的 string operator +(string x, object y)),这不是常量表达式。

有关更多信息,请参见我的早前答案


0

也许VS2010的错误可以帮助定义它:

Constant initializer must be compile-time constant

因此,“H” + 'i' 是运行时值。


那并没有解释为什么。"H" + "i" 没有问题。 - SLaks
@SLaks,没错,我喜欢你的“早期回答”,它深入解释了这个问题。 - Infinite Possibilities

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接