我的程序使用代碼:C#編譯器是否轉換並存儲靜態變量?
Convert.ToDouble(Int32.MaxValue)
相當定期。我只是好奇這是如何處理的編譯器。它是以靜態雙精度進行存儲還是在運行時執行?
我的程序使用代碼:C#編譯器是否轉換並存儲靜態變量?
Convert.ToDouble(Int32.MaxValue)
相當定期。我只是好奇這是如何處理的編譯器。它是以靜態雙精度進行存儲還是在運行時執行?
恆Int32.MaxValue
存儲在編譯的時候,實際上你的代碼將在編譯時被轉換爲Convert.ToDouble(0x7FFFFFFF)
。等效IL爲:
ldc.i4 FF FF FF 7F
call System.Convert.ToDouble
該值也被保存,因此可以在運行時通過反射來檢索。
但是,Convert.ToDouble
是一個僅在運行時進行評估的函數。
As minitech暗示,(double)Int32.MaxValue
在編譯時被評估。等效IL爲:
ldc.r8 00 00 C0 FF FF FF DF 41
您會推薦瞭解有關IL的任何資源?我目前一無所知 –
@ThomasFarley可能沒有比編寫一些C#更好的學習方式,下載一個免費的反編譯器,如ILSpy,並查看IL :) –
LINQPad是一個很好的查看IL –
爲什麼不'(雙)Int32.MaxValue'? – Ryan