C# 指定给X的表达式必须是常量

C# 指定给X的表达式必须是常量,c#,compiler-errors,constants,C#,Compiler Errors,Constants,我遇到了这个问题,正在寻找解决方案,但没有发现与我类似的情况。以下是我的情况: 在类文件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

我遇到了这个问题,正在寻找解决方案,但没有发现与我类似的情况。以下是我的情况:

在类文件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 + "";
它一直给我一个编译错误:

指定给someString的表达式必须是常量


虽然它们都是常数!当我删除Y.bar时,错误被删除,我不知道为什么。有什么帮助吗

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

您可以更简单地演示:

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

有关常量表达式的详细信息,请参见C#规范第7.19节。

表达式看起来是常量,但需要求值才能算出值。

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

private readonly someString = X.foo + Y.bar;
当一个变量被标记为
const
时,它们将被编译到程序集中,然后进行优化。当
Y.bar
被定义为
const
时,您隐式地调用了它的
ToString()
方法,这使得它不是常量