2017-01-24 63 views
-1

我正在使用在線轉換工具將VB代碼轉換爲C#。 VB的代碼是:Can Convert.ToDecimal可以返回一個常量嗎?

Private Const constant1 As Decimal = CDec(37.5) 

結果:

private const decimal constant1 = Convert.ToDecimal(37.5); 

然而,編譯時的錯誤消息:

表達被分配給 '常量1' 必須是恆定的

爲了消除錯誤,我修改了代碼:

private const decimal constant1 = (decimal)37.5; 

有誰能告訴爲什麼Convert.ToDecimal無法返回常量嗎?

+2

,因爲回報率取決於值被轉換 – Plutonix

+0

參考數字後綴:http://stackoverflow.com/questions/3569695/c-sharp-numeric-suffixes – GSP

回答

4

這裏你不需要Convert.ToDecimal(或CDec),如果你自己轉換的值是不變的。

你可以簡單的寫:

private const decimal constant1 = 37.5m; 
1

沒有,方法的返回值是不兼容const(因爲他們是,嗯,不是恆定的,至少不是編譯器)。但是你可以擺脫功能和使用十進制文字(「M」後綴)(和投地!):

private const decimal constant1 = 37.5m; 
2

當常量編譯時,實際值存儲在程序集的元數據。這意味着它在運行時完全不能改變。實際上,消費程序集假定它永遠不會改變,並將值編譯到它們的元數據中。

當您使用Convert.ToDecimal()時,您正在執行運行時代碼。因此,無法將該值分配給該常量,因爲在將值編譯爲程序集時無法運行代碼(至少不是沒有編譯器黑客)。

正如@AlexD所提到的,如果您使用靜態只讀值,您可以在運行時對其進行設置,因爲它沒有被編譯到程序集中。

private static readonly decimal constant1 = Convert.ToDecimal(36.6); 
相關問題