分配给X的表达式必须是常量

时间:2013-03-18 10:23:50

标签: c# compiler-errors const

我遇到这个问题并寻找解决方案,但没有找到与我类似的情况。这就是我所拥有的:

在类文件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时,错误被删除,我不知道为什么。有帮助吗?

3 个答案:

答案 0 :(得分:4)

您使用的const关键字错误。您可能希望将someString定义为:

private readonly someString = X.foo + Y.bar;

当变量标记为const时,它们将被编译到程序集中然后进行优化。虽然Y.bar被定义为const,但您隐式调用其ToString()方法,这使其不会保持不变。

答案 1 :(得分:3)

您要加入从intstring的转换。即使int是常量,转换也不会被视为常量表达式。

您可以更简单地证明:

class Test
{
    const int X = 10;
    const string Y = "X: " + X;
}

有关什么算作常量表达式的更多详细信息,请参阅C#规范的第7.19节。

答案 2 :(得分:1)

表达式看起来不变,但需要进行评估才能计算出值。