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

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 后,错误就消失了,但我不知道为什么。有人可以给我帮忙吗?

3个回答

4
您正在错误地使用const关键字。您可能想将someString定义为:
private readonly someString = X.foo + Y.bar;

当一个变量被标记为const时,它们会被编译成汇编并进行优化。虽然Y.bar被定义为const,但你隐式地调用了它的ToString()方法,这使它不再是常量。


3

你正在将 int 转换为 string。即使 int 是一个常量,这种转换也不被视为常量表达式。

你可以更简单地演示:

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

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

1
表达式看起来是常量,但需要进行评估才能确定其值。

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