Можно ли сделать какие-либо предположения о связи между 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) для получения информации о числовом формате из текущего языкового стандарта операционной системы.