2012-06-07 3 views
3

В качестве ответа на вопрос, связанный с оптимизацией преобразования double в строку для памяти (см. c# double to character array or alternative), я хотел посмотреть, как double.ToString() реализуется под капотом в .NET. , Когда я использую ILDASM или DotPeek я получить как:Проверка double.ToString()

[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. Я хотел знать, есть ли простой способ узнать, что такое реализация?

Приветствия

ответ

3

Как насчет того, чтобы смотреть на моно исходный код? Моно просто использовать IL, чтобы делать все это без кода C.

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

Я думаю, что WinDbg бы полезно - и вы извлекаете реализацию в моно?

1

Поскольку .NET Core является открытым исходным кодом, ответ на этот вопрос может быть обновлен. MethodImplOptions.InternalCall указывает, что FormatDouble - это FCall, который является механизмом связи с исходной реализацией. Вы можете найти встроенную версию FormatDoublehere.