作为一个关于优化内存转换为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
答案 0 :(得分:3)
查看单声道源代码怎么样? Mono只需使用IL即可完成整个操作,无需任何C代码。
mcs/class/corlib/System/Double.cs
mcs/class/corlib/System/NumberFormatter.cs
答案 1 :(得分:2)
由于.NET Core现在是开源的,因此可以更新这个问题的答案。 MethodImplOptions.InternalCall表示FormatDouble
是FCall,这是与本机实现进行通信的机制。您可以找到FormatDouble
here的原生实现。
答案 2 :(得分:1)
我认为WinDbg会有所帮助 - 您是否以单声道检查实现?
答案 3 :(得分:0)
在 .NET 5 中,FormatDouble
现在在 C# 中实现,源代码在 dotnet/runtime repository 中可用。