3

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

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

4

3 回答 3

4

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

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

当一个变量被标记为const它们被编译到程序集中然后被优化时。虽然Y.bar定义为const,但您隐式调用了它的ToString()方法,这使得它不是常量。

于 2013-03-18T10:25:56.363 回答
3

您包括从int到的转换string。即使int是常量,转换也不被视为常量表达式。

您可以更简单地证明这一点:

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

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

于 2013-03-18T10:25:22.430 回答
1

该表达式看起来是恒定的,但它需要求值以便计算出值。

于 2013-03-18T10:25:55.063 回答