检查double.ToString()

时间:2012-06-07 08:55:35

标签: c# .net clr double tostring

作为一个关于优化内存转换为double到string的问题的后续问题(参见c# double to character array or alternative)我想看看在.NET的引擎盖下如何实现double.ToString()。当我使用ildasm或DotPeek时,我得到:

[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
public static string FormatDouble(double value, string format, NumberFormatInfo info);

IL_0008:  call string System.Number::FormatDouble(float64,
                                                  string,
                                                  class System.Globalization.NumberFormatInfo)

无法进一步钻取。我想如果我的理解是正确的,那是因为这是对CLR的调用。我想知道有没有简单的方法来找出实现是什么?

干杯

A

4 个答案:

答案 0 :(得分:3)

查看单声道源代码怎么样? Mono只需使用IL即可完成整个操作,无需任何C代码。

mcs/class/corlib/System/Double.cs
mcs/class/corlib/System/NumberFormatter.cs

答案 1 :(得分:2)

由于.NET Core现在是开源的,因此可以更新这个问题的答案。 MethodImplOptions.InternalCall表示FormatDoubleFCall,这是与本机实现进行通信的机制。您可以找到FormatDouble here的原生实现。

答案 2 :(得分:1)

我认为WinDbg会有所帮助 - 您是否以单声道检查实现?

答案 3 :(得分:0)

在 .NET 5 中,FormatDouble 现在在 C# 中实现,源代码在 dotnet/runtime repository 中可用。