4

作为一个关于优化内存转换为字符串的问题的后续行动(参见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 的调用。我想知道有没有简单的方法来找出实现是什么?

4

4 回答 4

3

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

mcs/class/corlib/System/Double.cs
mcs/class/corlib/System/NumberFormatter.cs
于 2012-06-07T09:00:54.593 回答
3

由于 .NET Core 现在是开源的,因此可以更新此问题的答案。MethodImplOptions.InternalCall表示FormatDouble是一个FCall,它是一种与本机实现通信的机制。FormatDouble 您可以在此处找到本机实现。

于 2017-09-11T07:34:26.177 回答
1

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

于 2012-06-07T09:00:23.433 回答
0

在 .NET 5 中,FormatDouble现在用 C# 实现,源代码可在dotnet/runtime 存储库中找到。

于 2021-04-13T08:57:16.860 回答