Можно ли сделать какие-либо предположения о связи между object.ToString() и IFormattable.ToString(string, IFormatProvider) для встроенных типов?

Я пишу некоторый код форматирования вывода строки для агрегированных записей (думаю, вывод в формате CSV). Я пытаюсь написать так, чтобы он использовал встроенные возможности форматирования строк многих типов через IFormattable.ToString(string, IFormatProvider) интерфейс, в дополнение к простому object.ToString(),

Чтобы уменьшить дублирование кода, было бы неплохо сделать некоторые предположения о связи между object.ToString() а также IFormattable.ToString(string, IFormatProvider),

Например, можно ли предположить, что ToString() == ToString(null, null)? Существует ли поставщик культуры или формата по умолчанию, который поддерживает это отображение? Или между ними нет необходимых отношений?

1 ответ

Решение

На основании документации MSDN и исходного кода.NET можно предположить, что для встроенных типов ToString() эквивалентно ToString(null, null) а также ToString("G", null),

Есть некоторая информация об этом в Типах форматирования в.NET Framework на MSDN.

Например, согласно этому сайту Int32.ToString()

Вызовы Int32.ToString("G", NumberFormatInfo.CurrentInfo) отформатировать Int32 значение для текущей культуры.

Если вы проверите исходный код, вы заметите, что ToString() звонки

Number.FormatInt32(m_value, null, NumberFormatInfo.CurrentInfo);

в то время как String ToString(String format, IFormatProvider provider) звонки

Number.FormatInt32(m_value, format, NumberFormatInfo.GetInstance(provider));

Итак format на самом деле null не "G", Это не имеет значения, хотя, как "G" а также null должно быть таким же. NumberFormatInfo.GetInstance(null) возвращается NumberFormatInfo.CurrentInfo, так Int32.ToString() эквивалентно Int32.ToString("G", null) или же Int32.ToString(null, null),

Вы можете дважды проверить это с документацией IFormattable.ToString, чтобы увидеть, что null s действительно указывают значения по умолчанию для обоих параметров.

параметры

формат

Формат для использования.

-или же-

Пустая ссылка (Nothing в Visual Basic) для использования формата по умолчанию, определенного для типа реализации IFormattable.

formatProvider

Поставщик, используемый для форматирования значения.

-или же-

Пустая ссылка (Nothing в Visual Basic) для получения информации о числовом формате из текущего языкового стандарта операционной системы.

Другие вопросы по тегам