我遇到这个问题并寻找解决方案,但没有找到与我类似的情况。这就是我所拥有的:
在类文件X.cs中:
namespace BlaBla{
public class X{
public const string foo = "foo";
// other code
}
public class Y{
public const int bar = 0;
}
}
在其他一些课程中,我写作:
private const string someString = X.foo + Y.bar + "";
它一直给我一个编译错误:
The Expression assigned to someString must be constant
虽然它们都是不变的!当我删除Y.bar时,错误被删除,我不知道为什么。有帮助吗?
答案 0 :(得分:4)
您使用的const
关键字错误。您可能希望将someString
定义为:
private readonly someString = X.foo + Y.bar;
当变量标记为const
时,它们将被编译到程序集中然后进行优化。虽然Y.bar
被定义为const
,但您隐式调用其ToString()
方法,这使其不会保持不变。
答案 1 :(得分:3)
您要加入从int
到string
的转换。即使int
是常量,转换也不会被视为常量表达式。
您可以更简单地证明:
class Test
{
const int X = 10;
const string Y = "X: " + X;
}
有关什么算作常量表达式的更多详细信息,请参阅C#规范的第7.19节。
答案 2 :(得分:1)
表达式看起来不变,但需要进行评估才能计算出值。