6

我的程序使用以下代码:

Convert.ToDouble(Int32.MaxValue)

相当有规律。我只是好奇编译器是如何处理的。它是作为静态双精度存储还是在运行时执行?

4

1 回答 1

8

该常量Int32.MaxValue在编译时存储,实际上您的代码将Convert.ToDouble(0x7FFFFFFF)在编译时转换为。等效的 IL 为:

ldc.i4      FF FF FF 7F 
call        System.Convert.ToDouble

该值也被保存,因此可以在运行时通过反射检索。

但是,Convert.ToDouble是一个仅在运行时评估的函数。

正如minitech所建议的,(double)Int32.MaxValue在编译时进行评估。等效的 IL 为:

ldc.r8      00 00 C0 FF FF FF DF 41 
于 2013-06-19T03:56:22.750 回答