2013-03-18 82 views
3

我有这个问题,并寻找解决方案不变,但并没有发现类似mine.Here的什么,我有一个情况:分配给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 + ""; 

它不断给我一个编译错误:

The Expression assigned to someString must be constant

虽然他们都是不变的!当我删除Y.bar错误被删除,我不知道为什么。任何帮助?

回答

4

您正在使用const关键字错误。你可能要定义someString为:

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

当作为const他们向大会编译,然后优化的变量标记。虽然Y.bar被定义为const,但您隐式调用其ToString()方法,使其不稳定。

+0

这并不能解释为什么它不起作用。 – 2013-03-18 10:28:00

3

您包含从intstring的转换。尽管int是一个常量,但转换不被视为常量表达式。

可以证明更简单:在C#规范的

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

见7.19节有关的常数表达式才算数的更多细节。

1

表达式看起来不变,但它需要评估,以便可以计算出值。

相关问题