2013-03-18 80 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

表達式看起來不變,但它需要評估,以便可以計算出值。

相關問題