ToString() default CultureInfo

Думаю, я понимаю использование CultureInfo.

Если я делаю просто:

const int a = 5;
string b = a.ToString();

он равен:

const int a = 5;
string b = a.ToString(CultureInfo.InvariantCulture);

Другими словами, использует ли ToString() по умолчанию InvariantCulture или CurrentCulture или ни один?

Ответ 1

ToString будет использовать CurrentCulture, а не InvariantCulture, если вы не укажете культуру.

Ответ 2

ToString() использует CurrentCulture, если не указан

Смотрите: http://msdn.microsoft.com/en-us/library/6t7dwaa5(v=vs.85).aspx

"Возвращаемое значение форматируется с общим цифровым форматом specifier (" G ") и NumberFormatInfo для текущей культуры."

Ответ 3

Реализация всех встроенных классов и числовых типов ToString использует по умолчанию CultureInfo.CurrentCulture культуру, культуру, используемую текущий поток.

Это означает, что текущая культура (и, следовательно, ваши функции форматирования и разбора строк) будет отличаться от одной системы к другой. По-моему, это ошибка дизайна, и она укусила людей в прошлом. Он должен был по умолчанию InvariantCulture и давать одинаковые результаты в разных системах, но, к сожалению, этого не делает.